侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

java集合类图文教程

Java  /  管理员 发布于 8年前   207

java集合类详解:(推荐:java视频教程)

1、java集合类图

1.jpg

2.jpg

上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。

发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。

它的一个子接口LinkedIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。也就是说如果是先Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会在遍历到,通常无序集合实现的都是这个接口。

比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如ArrayList。

还有一个特点就是抽象类的使用。如果要自己实现一个集合类,去实现那些抽象的接口会非常麻烦,工作量很大。这个时候就可以使用抽象类,这些抽象类中给我们提供了许多现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作流大大降低。

3.jpg

2、详解

2.1HashSet

HashSet是Set接口的一个子类,主要的特点是:里面不能存放重复元素,而且采用散列的存储方法,所以没有顺序。这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致。

代码实例:HashSetDemo

package edu.sjtu.erplab.collection;import java.util.HashSet;import java.util.Iterator;import java.util.Set;public class HashSetDemo {    public static void main(String[] args) {        Set<String> set=new HashSet<String>();    set.add("a");        set.add("b");        set.add("c");        set.add("c");        set.add("d");    //使用Iterator输出集合        Iterator<String> iter=set.iterator();        while(iter.hasNext())        {System.out.print(iter.next()+" ");        }        System.out.println();        //使用For Each输出结合        for(String e:set)        {System.out.print(e+" ");        }        System.out.println();    //使用toString输出集合        System.out.println(set);    }}

代码实例:SetTest

package edu.sjtu.erplab.collection;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.util.HashSet;import java.util.Iterator;import java.util.Scanner;import java.util.Set;public class SetTest {    public static void main(String[] args) throws FileNotFoundException {        Set<String> words=new HashSet<String>();        //通过输入流代开文献        //方法1:这个方法不需要抛出异常        InputStream inStream=SetTest.class.getResourceAsStream("Alice.txt");    //方法2:这个方法需要抛出异常        //InputStream inStream = new FileInputStream("D:\\Documents\\workspace\\JAVAStudy\\src\\edu\\sjtu\\erplab\\collection\\Alice.txt");        Scanner in=new Scanner(inStream);        while(in.hasNext())        {words.add(in.next());        }    Iterator<String> iter=words.iterator();    for(int i=0;i<5;i++)        {if(iter.hasNext())System.out.println(iter.next());        }    System.out.println(words.size());    }}

2.2ArrayList

ArrayList是List的子类,它和HashSet想法,允许存放重复元素,因此有序。集合中元素被访问的顺序取决于集合的类型。如果对ArrayList进行访问,迭代器将从索引0开始,每迭代一次,索引值加1。然而,如果访问HashSet中的元素,每个元素将会按照某种随机的次序出现。虽然可以确定在迭代过程中能够遍历到集合中的所有元素,但却无法预知元素被访问的次序。

代码实例:ArrayListDemo

package edu.sjtu.erplab.collection;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class ArrayListDemo {    public static void main(String[] args) {        List<String> arrList=new ArrayList<String>();    arrList.add("a");        arrList.add("b");        arrList.add("c");        arrList.add("c");        arrList.add("d");        //使用Iterator输出集合        Iterator<String> iter=arrList.iterator();        while(iter.hasNext())        {System.out.print(iter.next()+" ");        }        System.out.println();        //使用For Each输出结合        for(String e:arrList)        {System.out.print(e+" ");        }        System.out.println();    //使用toString输出集合        System.out.println(arrList);    }}

2.3 ListIterator

ListIterator是一种可以在任何位置进行高效地插入和删除操作的有序序列。

代码实例:LinkedListTest

package edu.sjtu.erplab.collection;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;public class LinkedListTest {    public static void main(String[] args) {        List<String> a=new ArrayList<String>();        a.add("a");        a.add("b");        a.add("c");        System.out.println(a);    List<String> b=new ArrayList<String>();        b.add("d");        b.add("e");        b.add("f");        b.add("g");        System.out.println(b);    //ListIterator在Iterator基础上添加了add(),previous()和hasPrevious()方法        ListIterator<String> aIter=a.listIterator();        //普通的Iterator只有三个方法,hasNext(),next()和remove()        Iterator<String> bIter=b.iterator();    //b归并入a当中,间隔交叉得插入b中的元素        while(bIter.hasNext())        {if(aIter.hasNext())    aIter.next();aIter.add(bIter.next());        }        System.out.println(a);    //在b中每隔两个元素删除一个        bIter=b.iterator();    while(bIter.hasNext())        {bIter.next();if(bIter.hasNext()){    bIter.next();//remove跟next是成对出现的,remove总是删除前序    bIter.remove();}        }        System.out.println(b);    //删除a中所有的b中的元素        a.removeAll(b);        System.out.println(a);    }}

2.4HashMap

HashMap的存取实现

//存储时:int hash = key.hashCode();// 这个hashCode方法这里不详述,只要理解每个key的hash是一个固定的int值int index = hash % Entry[].length;Entry[index] = value;//取值时:int hash = key.hashCode();int index = hash % Entry[].length;return Entry[index];

2.5WeekHashMapDemo

package edu.sjtu.erplab.collection;import java.util.WeakHashMap;public class WeekHashMapDemo {    public static void main(String[] args) {        int size = 100;        if (args.length > 0) {size = Integer.parseInt(args[0]);        }        Key[] keys = new Key[size];        WeakHashMap<Key, Value> whm = new WeakHashMap<Key, Value>();        for (int i = 0; i < size; i++) {Key k = new Key(Integer.toString(i));Value v = new Value(Integer.toString(i));if (i % 3 == 0) {    keys[i] = k;//强引用}whm.put(k, v);//所有键值放入WeakHashMap中        }        System.out.println(whm);        System.out.println(whm.size());        System.gc();    try {// 把处理器的时间让给垃圾回收器进行垃圾回收Thread.sleep(4000);        } catch (InterruptedException e) {e.printStackTrace();        }     System.out.println(whm);        System.out.println(whm.size());    }}class Key {    String id;    public Key(String id) {        this.id = id;    }    public String toString() {        return id;    }    public int hashCode() {        return id.hashCode();    }    public boolean equals(Object r) {        return (r instanceof Key) && id.equals(((Key) r).id);    }    public void finalize() {        System.out.println("Finalizing Key " + id);    }}class Value {    String id;    public Value(String id) {        this.id = id;    }    public String toString() {        return id;    }    public void finalize() {        System.out.println("Finalizing Value " + id);    }}

比较

2.jpg

更多java相关文章请关注Java基础教程栏目。

以上就是java集合类图文教程的详细内容,更多请关注其它相关文章!


  • 上一条:
    java中的队列包括哪些
    下一条:
    详解java中的transient关键字
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在java中实现的脱敏工具类代码示例分享(0个评论)
    • zookeeper安装流程步骤(0个评论)
    • 在java中你背的“八股文”可能已经过时了(2个评论)
    • 在php8.0+版本中使用属性来增加值代码示例(3个评论)
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2018-03
    • 2020-03
    • 2023-05
    • 2023-11
    • 2024-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客