Java集合,list和set

时间:2021-08-09
本文章向大家介绍Java集合,list和set,主要包括Java集合,list和set使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一.为什么使用集合,与数组相比

1.长度

  数组长度固定;

  集合长度可变。

2.内容

  数组可存储基本数据类型或引用数据类型,但只可选其一;

  集合只能存储引用数据类型,可同时使用不同类型,但通常情况下不会同时使用多种数据类型。

二.list与set的区别,对比

  list set
有序性 按插入顺序排序 按特定算法排序
唯一性 可以重复 元素唯一
元素获取 通过索引直接获取 不能通过索引获取

Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

三.list

(1)ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素
(2)LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素
(3)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素

 1         //初始化一个空的arraylist列表
 2         List<String> alist=new ArrayList<>();
 3         System.out.println(alist.toString()+"是否为空:"+alist.isEmpty());
 4 
 5         //向列表添加元素
 6         alist.add("a");
 7         alist.add("b");alist.add("b0");alist.add("b");
 8         alist.add("c");
 9         System.out.println(alist.toString()+"  "+alist.size()+"个元素");
10         System.out.println("是否包含c:"+alist.contains("c"));
11 
12         //删除一个链表中等于此参数的元素
13         alist.remove("b");
14         System.out.println(alist.toString()+"  "+alist.size()+"个元素");
15         //删除指定位置的元素
16         alist.remove(1);
17         System.out.println(alist.toString()+"  "+alist.size()+"个元素");
18         //修改指定位置的值
19         System.out.println("修改前的值: "+alist.set(2,"ccc"));
20         System.out.println(alist.toString());
21         //第一次出现的索引
22         System.out.println("b的索引: "+alist.indexOf("b"));
23         System.out.println(alist.get(1));
24         //截取
25         System.out.println("获取0(包含)-1(不含)间的元素,返回值为列表 "+alist.subList(0,1).toString());
26         
27         List<String> blist=new ArrayList<>();
28         //将alist的元素全部添加到blist中
29         blist.addAll(alist);
30         System.out.println("b:   "+blist.toString());
31 
32         //使用iterator访问集合
33         Iterator<String> it=blist.iterator();
34         System.out.print("iterator  ");
35         while (it.hasNext()) {
36             System.out.print(it.next()+" ");
37         }
38 
39         //在指定位置添加元素
40         blist.add(2,"b2");
41         System.out.println("\n"+blist.toString());
42         
43         System.out.println("-----------列表与数组的转换------------");
44        /*
45        * 将arraylist转换为字符串数组
46        * 1.初始化一个数组,需指定数组大小
47        * 2.使用arraylist.toArray(array)完成转换
48        * */
49         String[] arr1=new String[blist.size()];
50         blist.toArray(arr1);
51         for (String i:arr1)
52             System.out.print(i+" ");
53         /*
54         * 将一个字符串数组转换为arraylist
55         * */
56         ArrayList<String> clist=new ArrayList<String>(Arrays.asList(arr1));
57         System.out.println("\n"+clist.toString());        

 四.set

(1)HashSet底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的,如果没有重写这两个方法,则无法保证元素的唯一性;

(2)LinkedHashSet底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高;
(3)TreeSet底层数据结构采用二叉树来实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。

 1         System.out.println("------------hashset-------------");
 2         //初始化一个hashset
 3         HashSet<String> aset=new HashSet<>();
 4         aset.add("aaa");
 5         aset.add("bbb");
 6         aset.add("ccc");
 7         //hashset不会按插入顺序存储数据
 8         System.out.println(aset.toString());
 9 //        for (String i:aset){
10 //            System.out.print(i+" ");
11 //        }
12         //向hashset中添加重复元素时,set不会改变
13         aset.add("aaa");
14         System.out.println(aset.toString());
15 
16         System.out.println("-------------treeset--------------");
17         //自动排序
18         TreeSet<Integer> bset=new TreeSet<>();
19         bset.add(5);
20         bset.add(2);
21         bset.add(7);
22         bset.add(9);
23         bset.add(6);
24         bset.add(7);
25 //        for(Integer i:bset){
26 //            System.out.print(i+" ");
27 //        }//不能使用普通for遍历
28         System.out.println(bset.toString());
29 
30         Integer[] sort={7,3,6,2,4,6,8};
31         TreeSet<Integer> cset=new TreeSet<Integer>(Arrays.asList(sort));
32         System.out.println(cset.toString());    

五.使用场景

【图片...】

原文地址:https://www.cnblogs.com/wx23/p/15119668.html