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
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 骚操作 | 用 Python 实现 GIF 倒放
- TensorFlow学习笔记--CIFAR-10 图像识别
- TensorFlow学习笔记--自定义图像识别
- TensorFlow学习笔记--Deep Dream模型
- Python入门系列第二章--第一节:变量、字符串与数字
- JavaWeb - Filter 和 Listener
- Python入门系列第一章--第二节:我的第一个Python项目
- Python入门系列第二章--第二节:注释
- JavaScript进阶教程(4)-函数内this指向解惑call(),apply(),bind()的区别
- 第三章--第一节:条件判断语句
- 用 Python 实现朋友圈中的九宫格图片
- 第三章--第二节:循环语句
- 第三章--第三节:列表
- 第三章--第三节(补充):列表排序
- 第三章--第四节:字典