JAVA总结篇七(集合)

集合

这里要说的集合主要有三种:List集合、Set集合以及Map集合

一、List集合:

List集合继承collection类,其实现类有:ArrayList:异步;非线程安全;随机访问效率高。

                                                           LinkedList:异步;非线程安全;随机插入、删除效率高。

                                                           vector:同步;线程安全。(除非需要考虑线程安全问题,不然一般用ArrayList)

1.ArrayList:

最常用的集合之一,是一个数组队列,相当于动态数组,由数组实现,因此它的随机访问效率较高。

示列:List<String> list=new ArrayList<>();

          list.add("a");

          list.add("b");

          list.add("c");

          list.add("d");

遍历方式:

推荐使用foreach进行遍历;

for(String string : list){

    System.out.println(string);

}

2.LinkedList:

它是一个双向链表;可以被用做堆栈(stack)、队列(queue)、或双端队列(deque);

堆栈:

元素先进后出;

示列:

Deque<String> deque = new LinkedList<>();
        deque.push("1");
        deque.push("2");
        deque.push("3");
        deque.push("4");
        for (String string : deque) {
            System.out.println(string);

        }

队列:

示列:

Queue<String> queue = new LinkedList<>();
        queue.add("1");
        queue.add("2");
        queue.add("3");
        queue.add("4");
        for (String string : queue) {
            System.out.println(string);

        }

双端队列:

可以分别从集合首部或尾部加入元素;

示列:

Deque<String> deques=new LinkedList<>();
        deques.addFirst("3");
        deques.addLast("4");
        deques.addFirst("2");
        deques.addFirst("1");
        for (String string : deques) {
            System.out.println(string);
        }


3.vector:

它除了线程是安全的以外其它基本与ArrayList相同;同时,还有一个子类为Stack。

示列:

List<String> vector=new Vector<>();
        vector.add("1");
        vector.add("2");
        vector.add("3");
        vector.add("4");
        for (String string : vector) {
            System.out.println(string);

        }

4.Stack:

它与deque类似(虽然说是先进后出,但我用foreach遍历完全没看出,用pop一个个取值到是可以看出来;比较凌乱,不过不常用,用了也不会错,有缘再去了解,hhh),不过是线程安全的;它有两个重要的方法:peek(查询首元素但不删除)、pop(查询首元素并删除)。

示列:

Stack<String> stack=new Stack<>();

    stack.push("1");

    stack.push("2");

    stack.push("3");

    stack.push("4");

 System.out.println(stack.peek());

System.out.println(stack.pop());

System.out.println(stack.peek());

最后打印出来的值为:4

                                  4

                                  3

二、Set集合:

Set同样继承了collection类,是非线程安全的,它的主要特性便是元素的唯一性;其实现类有:HashSet、LinkedHashSet、TreeSet。

1.HashSet:

HashSet是抽象类AbstractSet的子类,实现了Set接口,使用哈希方法储值,具有最好的性能,但它的元素是无序的;

示列:

Set<String> set=new HashSet<>();

        set.add("a");
        set.add("d");
        set.add("c");
        set.add("b");
        set.add("靖");
        set.add("边");
        set.add("安达");
        for (String string : set) {
            System.out.print(string+"==");
            System.out.println(string.hashCode());
        }


2.LinkedHashSet:

它继承了HashSet,实现了Set接口,但它是有序的。

示列:

LinkedHashSet<String> lhset=new LinkedHashSet<>();
        lhset.add("a");
        lhset.add("d");
        lhset.add("c");
        lhset.add("b");
        lhset.add("靖");
        lhset.add("边");
        lhset.add("安达");
        for (String string : lhset) {
            System.out.print(string+"==");
            System.out.println(string.hashCode());
        }

3.TreeSet:

HashSet的性能总比TreeSet好,继承AbstractSet,实现了SortedSet接口,不可放null值,使用自然顺序对元素进行排序;

具体规则:当放数字时,按第一个数字从小到大排序,如果一样则继续排第二个,无值则优先前排,以此类推;

                 当放字母时,按第一个字母字母表顺序排序,如果一样则继续排第二个,无值则优先前排,以此类推;

                 当放汉字时,按其哈希值数字顺序从小到大排序,其规则与数字排序一样;

                 当混合值时,按数字先于字母先于汉字排序,其它基本与上一致。

示列:

TreeSet<String> treeSet = new TreeSet<>();
        treeSet.add("大");
        treeSet.add("ge");
        treeSet.add("geg");
        treeSet.add("小");
        treeSet.add("多");
        treeSet.add("少");
        treeSet.add("9344");
        treeSet.add("4999999922");
        for (String string : treeSet) {
            System.out.print(string+"==");
            System.out.println(string.hashCode());
        }

三、Map集合:

Map没有继承collection类,提供了从key到value的映射,key的值不能重复,所以它的key类似于一个Set,value类似于一个List;Map的实现类有:HashMap、TreeMap、Hashtable、LinkedHashMap、Properties。

1.HashMap:

实现map接口,元素是无序的,并且是非线程安全。

示列:

Map<Object, Object> map = new HashMap<>();
        map.put("z", "4");
        map.put("d", "zz");
        map.put("9", "zz");
        map.put("4", "艾斯");
        map.put("阿道夫", "value");
        for (Object string : map.keySet()) {
            System.out.println("map的key为" + string + "--value为" + map.get(string));

        }

2.TreeMap:

它的元素是根据键(key)按自然顺序排序的,具体方法与TreeSet相同,但键不可为null,并且是非线程安全的。

示列:

TreeMap<Object, Object> tm = new TreeMap<>();
        tm.put("d", "班2");
        tm.put("1", "班1");
        tm.put("e", "班");
        tm.put("和", "高");
        tm.put("i", "周");
        for (Object string : tm.keySet()) {
            System.out.println("tm的key为" + string + "--value为" + tm.get(string));

        }

3.Hashtable:

它是无序的,还是线程安全的,但它的键(key)和值(value)都不可以为null。

示列:

Hashtable<Object, Object> ht = new Hashtable<>();

        ht.put("a", "a");
        ht.put("c", "c");
        ht.put("b", "b");
        ht.put("", "");
        ht.put(" ", " ");
        for (Object string : ht.keySet()) {
            System.out.println("ht的key为" + string + "--value为" + ht.get(string));

        }

4.LinkedHashMap:

有序的,线程不安全的。

示列:

LinkedHashMap<String, String> lhm = new LinkedHashMap<>();
        lhm.put("a", "a");
        lhm.put("b", "b");
        lhm.put("", "");
        lhm.put(" ", " ");
        lhm.put(null, null);
        for (Object string : lhm.keySet()) {
            System.out.println("lhm的key为" + string + "--value为" + lhm.get(string));
        }

5.Properties:

一般用于读取文件,这里有个不错的文,写的挺详细的,链接如下:
https://blog.csdn.net/weixin_41547486/article/details/79921244

猜你喜欢

转载自blog.csdn.net/imjavaxb/article/details/80353447
今日推荐