List Set Map

关系:集合三大分支 List(接口)、Set(接口)、Map(接口),其中List与Set都是Collection的子接口,Map是单独的一个接口。

特点:

 List家族都是有序可重复(这里的有序并非集合本身的存储顺序,而是指存入与取出的顺序),下面都是List的实现类:

        ArrayList:底层用动态数组实现,更适合遍历,不适合插入删除(性能低);

        遍历方式:1.存储的形式就是数组,可以跟数组一样直接使用for循环  

        

     /*
        ArrayList遍历
         */
        List<String> list=new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        System.out.println(list);

输出:

111
222
333
[111, 222, 333]

 2.增强for循环

 /*
        ArrayList遍历
         */
        List<String> list=new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        for(String str:list){
            System.out.println(str);
        }
        System.out.println(list);

3.Iterator迭代器,说白了就是通过List接口里的一个方法返回一个名字叫迭代器的东东,需要用到它的几个方法

想过一个问题没有,for循环其实足够了,为啥还搞个什么迭代器,有啥意义?意义不是装逼,而是为了性能,几百几千条或许差别不大,但百万级数据性能差异就出来了。后边或许会写一篇专门讲性能差别的底层逻辑

 /*
        ArrayList遍历
         */
        List<String> list=new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        Iterator<String> it=list.iterator();
        //迭代器就是一个集装箱,里面很黑只能用手摸,集装箱里有三个小箱子,工人按照某种次序(先最近)一个一个的搬出来,
        //摸到一个,就喊一声true,直到三个搬完摸第四个的时候摸空了,喊一声false
        while(it.hasNext()){//摸到就喊true
            System.out.println(it.next());//把现在摸到的箱子打开看看是什么
        }
        System.out.println(list);
//有没有更多的呢遍历方式呢,应该有,不过没啥意思了,常用的会了就行了,有需要再去搞其它

        Vector:跟ArrayList一模一样啊,区别是这个是早期版本,线程安全,效率较低。

//Vector跟ArrayList差不多,不解释直接上代码看看就完事了
/*
        Vector遍历
         */
        List<String> vector=new Vector<>();
        vector.add("111");
        vector.add("222");
        vector.add("333");
        for(String str:vector){
            System.out.println(str);
        }
        System.out.println(vector);
 /*
        Vector遍历
         */
        List<String> vector=new Vector<>();
        vector.add("111");
        vector.add("222");
        vector.add("333");
        for(int i=0;i<vector.size();i++){
            System.out.println(vector.get(i));
        }
        System.out.println(vector);

 /*
        Vector遍历
         */
        List<String> vector=new Vector<>();
        vector.add("111");
        vector.add("222");
        vector.add("333");
        Iterator<String> it=vector.iterator();
        //迭代器就是一个集装箱,里面很黑只能用手摸,集装箱里有三个小箱子,工人按照某种次序(先最近)一个一个的搬出来,
        //摸到一个,就喊一声true,直到三个搬完摸第四个的时候摸空了,喊一声false
        while(it.hasNext()){//摸到就喊true
            System.out.println(it.next());//把现在摸到的箱子打开看看是什么
        }
        System.out.println(vector);

  LinkedList:底层采用链表形式,插入删除性能更高,遍历性能较低。

      遍历方式一样的:1.for 2.for each 3.Iterator

  Stack:是Vector的子类,压栈的存储特点,先进后出,类似子弹弹夹

      遍历方式一样的:1.for 2.for each 3.Iterator

总结:List接口家族下的子实现类遍历记住这三种ok了1.for 2.for each 3.Iterator

Set家族无序无重复(相同的元素,只存储第一个,后边的就不再存入):

      HashSet:底层采用hashMap的存储方式,性能更高,非线程安全

      遍历:2.for each 3.Iterator  

      TreeSet:存入取出的是无序的,但是存入后会根据某种机制自动排序,性能更低。

      遍历:2.for each 3.Iterator 

总结;Set集合特点是无序,无重复,无索引,由于无序没得索引,也就没有提供通过索引获取值的方法

Map家族,键值对的存储方式(Key-Value):通过唯一的k快速寻找value

  HashMap:性能更高,线程非安全,多个线程操作一个HashMap时容易遭

  HashTable:用法跟HashMap差不多,线程安全,多线程的时候可以用它

       TreeMap:希望存入的key自动排序用它。

  遍历:map类型的遍历有所不同,1.Map.Entry ,大概是把map打包成一个Set<Map.Entry<类型,类型>>这玩意,这玩意把所有的key-value合成一个整体装在一个箱子里,然后利用它自带的getKey,getValue获得值

 /*
Map.Entry
*/
Map<String,String> hashMap=new HashMap();
hashMap.put("1","111");
hashMap.put("2","222");
hashMap.put("3","333");
Set<Map.Entry<String, String>> entrySet=hashMap.entrySet();
for(Map.Entry<String,String> entry:entrySet){
System.out.println(entry.getKey()+"="+entry.getValue());
}
System.out.println(hashMap);

2.keySet()  自带的方法,可以把所有的key取出来存到一个Set集合,然后再用foreach遍历

 Map<String,String> hashMap=new HashMap();
hashMap.put("1","111");
hashMap.put("2","222");
hashMap.put("3","333");
Set<String> keys=hashMap.keySet();
for(String key:keys){
System.out.println(hashMap.get(key));
}
System.out.println(hashMap);

3.Iterator  主要是hashMap.entrySet().iterator()返回一个迭代器,然后就

Map<String,String> hashMap=new HashMap();
hashMap.put("1","111");
hashMap.put("2","222");
hashMap.put("3","333");
Iterator<Map.Entry<String, String>> iterator=hashMap.entrySet().iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println(hashMap);
原文地址:https://www.cnblogs.com/hebiao/p/12822375.html