Java集合详解一(List和Set) 我不是女神ヾ 2023-10-18 22:32 122阅读 0赞 我的网站:[欢迎大家访问][Link 1] ![aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDE5LzA3LzI4L2VsenFTSS5wbmc][] ### 概念 ### 目前存储数据的方式有哪些 数组; 基于数组模拟的容器类; 基于链表结构的容器类; 在Java中已经设计好了一些类和接口,和我们之前模拟的容器类功能一样。像这样的类和接口,在Java中已经写好了,我们叫做集合 ### List和Set的区别 ### List和Set的区别 相同点:都继承了Collection接口,都是Java中的集合,都可以存放任意类型任意多个元素 不同点: List:有序可重复 ArrayList和LinkedList Set:无序不可重复 HashSet:去重是通过hashCode()和equals()共同决定 TreeSet:去重是通过自然排序(实现Comparable接口)或者定制排序(创建对象时传入的比较器)来实现 ### List集合 ### #### ArrryaList(基于数组) #### 底层是由数组实现 ArrayList基于数组的容器类实现 调用容器类方法增删改查数据 #### Demo #### package com.ifueen.classtest._01ArrayList; import java.util.ArrayList; import java.util.Iterator; import javafx.print.Collation; public class _01ArrayList { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList list = new ArrayList(); //实例化ArrayList对象 list.add(15); //给集合添加元素 list.add(0,"我今年"); //add(int index, E element):在此列表中指定的位置插入指定的元素 list.clear(); //clear():从此列表中移除所有元素 list.add("你离开了南京"); list.add("从此没人陪我说话"); System.out.println(list); //打印集合中的元素 ArrayList list1 = new ArrayList(); list1.add("我不想说"); list1.add(34); list1.add(1,"我今年"); list1.add("了"); System.out.println(list1); Iterator iterator = list.iterator(); while(iterator.hasNext()){ //hasNext()方法作用:如果仍有元素可以迭代,则返回 true System.out.println(iterator.next()); //next()方法作用:返回迭代的下一个元素,用Object类型的变量接收 } } } #### LinkedList(基于链表) #### 基于链表结构的容器类实现 LinkedList 属于java.util包下面,也实现Iterable接口,说明可以使用迭代器遍历; #### Demo #### package com.ifueen.classtest._02LinkedList; import java.util.Iterator; import java.util.LinkedList; public class _02LinkedList { /* * LinkList集合:底层由链表实现 * */ public static void main(String[] args) { // TODO Auto-generated method stub LinkedList list = new LinkedList(); list.add(15); //给集合添加元素 list.add(0,"我今年"); //add():在此列表中指定的位置插入指定的元素 list.clear(); //clear():从此列表中移除所有元素 list.add("你离开了南京"); list.add("从此没人陪我说话"); //for循环来遍历 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); //get方法作用:返回此列表中指定位置处的元素 } //foreach来遍历 for (Object object : list) { System.out.println(object); } //用迭代器来遍历 Iterator iterator = list.iterator(); //新建迭代器 while (iterator.hasNext()) { //利用迭代器进行遍历 Object object = (Object) iterator.next(); //返回迭代的下一个元素,用Object类型的变量接收 System.out.println(object); //输出元素 } } } #### 面试题:ArrayList和LinkedList区别 #### 两者都是实现List接口,都可以存放任意多个任意类型的数据 ArrayList底层是由数组来实现,在数据量多的时候,查询起来较快,但是新增的时候需要不停创建新的数组,速度就会变慢 LinkList底层是由链表实现,在数据量大的时候,需要去到每一个节点去挨个查找,所以查询起来的速度比较慢,但是在新增的时候就比较快 ### Set集合 ### #### HashSet #### 存储任意多个类型不同的元素,但是是无序(添加顺序和输出顺序不一致),且不能重复,如果有重复元素,会自动去重 #### Demo #### package com.ifueen.classtest._03HashSet; import java.util.HashSet; import java.util.Iterator; public class _03HashSet { /* * HashSet:存储任意多个类型不同的元素,但是是无序(添加顺序和输出顺序不一致) * 且不能重复,如果有重复元素,会自动去重 * */ public static void main(String[] args) { // TODO Auto-generated method stub HashSet hst = new HashSet(); //实例化HashSet对象 hst.add("你离开了南京"); //往集合里面添加元素 hst.add("从此没有人和我说话"); System.out.println(hst); HashSet hst1 = new HashSet(); //实例化HashSet对象 hst1.add("A"); hst1.add("C"); hst1.add("B"); hst1.add("E"); hst1.add("D"); //System.out.println(hst1); //输出[A, B, C, D, E],不会按照添加的顺序输出 hst1.clear(); //清除元素 hst1.add("A"); hst1.add("A"); hst1.add("B"); System.out.println(hst1); //输出[A, B],自动去重 _03Test test1 = new _03Test("我想"); _03Test test2 = new _03Test("我想"); hst1.add(test1); hst1.add(test2); System.out.println(hst1); //此时只会打印一个我想,实现了去重功能 } } } #### TreeSet #### 支持存储任意多个类型不同的元素,无序(添加顺序和输出顺序不一致)不可重复,但是同时只能放同一种类型,想要添加自定义类型就需要在自定义类里面实现自由排序(自然排序就是实现Comparable接口) 定制排序和自然排序的区别: 自然排序:所有排序都按照统一的规则 定制排序:按照自定义的规则来进行排序 #### Demo #### package com.ifueen.classtest._04TreeSet; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; public class _04TreeSet { public static void main(String[] args) { // TODO Auto-generated method stub TreeSet tst = new TreeSet(); //实例化TreeSet对象 tst.add("我们不能失去信仰"); //添加元素 tst.add("查拉图斯特拉如是说"); System.out.println(tst); TreeSet tst1 = new TreeSet(); tst1.add("木卫三"); tst1.add("远航"); //tst1.add(46); tst1.add("远航"); System.out.println(tst1); //报错:java.lang.String cannot be cast to java.lang.Integer同时只能存放同一类型 _04Person p1 = new _04Person("开心"); _04Person p2 = new _04Person("开心"); _04Test test = new _04Test(); TreeSet tst2 = new TreeSet(test); //实例化Tree对象并传入test类对象 tst2.add(p1); tst2.add(p2); System.out.println(tst2); //输出一个开心,说明我们自定义去重成功 //遍历方式 //forearch for (Object object : tst2) { System.out.println(object); } //利用迭代器遍历 Iterator iterator = tst2.iterator(); while (iterator.hasNext()) { Object object = (Object) iterator.next(); //返回迭代的下一个元素,用Object类型的变量接收 System.out.println(object); } } } [Link 1]: https://www.ifueen.com [aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDE5LzA3LzI4L2VsenFTSS5wbmc]: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDE5LzA3LzI4L2VsenFTSS5wbmc
相关 详解Java集合框架:List和Set的区别 在Java的集合框架中,List和Set都是重要的数据结构。它们分别关注元素的顺序性和唯一性,下面是两者的详细区别: 1. **元素的顺序性:** List 是有序的(Seq 喜欢ヅ旅行/ 2024年09月23日 07:06/ 0 赞/ 65 阅读
相关 详解Java集合框架中的List和Set区别 在Java集合框架中,`List`和`Set`都是用来存储对象的容器,但它们在结构、操作以及应用场景上存在显著差异: 1. 结构: - `List`:元素是有序的(通常 「爱情、让人受尽委屈。」/ 2024年09月10日 11:00/ 0 赞/ 68 阅读
相关 java基础之集合详解(list,set,map) 一、集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。 1. Collection:Collectio 素颜马尾好姑娘i/ 2024年03月30日 15:32/ 0 赞/ 55 阅读
相关 Java集合详解一(List和Set) 我的网站:[欢迎大家访问][Link 1] ![aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDE5LzA3LzI4L2VsenFTSS5wbmc][] 概 我不是女神ヾ/ 2023年10月18日 22:32/ 0 赞/ 123 阅读
相关 Java -- 集合(List,Set,Map) 文章目录 Collection接口 List接口的方法(重点) Set 本是古典 何须时尚/ 2023年03月13日 03:14/ 0 赞/ 48 阅读
相关 Java — set 和 list 集合练习题 1、使用Set集合,生成1-25之内不重复的7个随机整数。 //代码 package com.practice1111; import 朱雀/ 2022年12月20日 09:05/ 0 赞/ 141 阅读
相关 Java集合详解3——List与Set小结 Java集合详解3——List与Set小结 List与Set小结 ArrayList和Vector List与Set小结 1. 我不是女神ヾ/ 2022年12月20日 02:49/ 0 赞/ 139 阅读
相关 Java集合(List、Map、Set)详解 一、集合的概念 1. 什么是集合 在Java当中,有一个类专门用来存放其它类的对象,这个类就叫做集合,它就是将若干性质相同或相近的类对象组合在一起而形成的一个整 素颜马尾好姑娘i/ 2022年03月15日 11:12/ 0 赞/ 404 阅读
相关 Java集合:List 和 Set 区别 在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口。 今天我们 秒速五厘米/ 2022年03月11日 10:39/ 0 赞/ 351 阅读
还没有评论,来说两句吧...