当前位置: 首页 > news >正文

门户网站建设服务收费北京网站建设小鱼在线

门户网站建设服务收费,北京网站建设小鱼在线,手机做logo用什么网站,淘宝客网站如何做推广目录 前言: 一、List接口 1.1 ArrayList 1.2 LinkedList 1.3 Vector 二、Set接口 2.1 HashSet 2.2 TreeSet 2.3 LinkedHashSet 三、应用选择 前言: 本篇文章重点梳理 List 接口和 Set 接口的核心内容,结合代码案例帮大家吃透它们的…

目录

前言:

一、List接口

1.1 ArrayList

1.2 LinkedList

1.3 Vector

二、Set接口

2.1 HashSet

2.2 TreeSet

2.3 LinkedHashSet

三、应用选择


前言:

本篇文章重点梳理 List 接口和 Set 接口的核心内容,结合代码案例帮大家吃透它们的特点和用法。

先简单复习下 Collection 接口:它是所有单列集合的 “老祖宗”,定义了添加、删除、判断包含等通用方法,像add()、remove()、contains()这些,咱们后面讲的 List 和 Set 都能直接用。

一、List接口

------有序、可重复、带索引的 “排队队伍”

List 接口继承了 Collection,就像在 Collection 的基础上多了些 “特殊技能”。咱们记住它的三个核心特点:

--有序:元素怎么存进去,取出来还是这个顺序,比如存[1,2,3],取出来不会变成[3,1,2];
--带索引:可以通过下标(0、1、2...)直接访问元素,就像数组那样用get(index)拿值;
--可重复:同一个元素能存多次,比如list.add("a"); list.add("a");会有两个 "a"。

List接口有三种实现类:ArrayList、LinkedList、Vector。

1.1 ArrayList

------查询快、增删慢的 “数组加强版”

ArrayList 是 List 最常用的实现类,底层就是个动态数组(长度能自动变)

  • 优点:查询快!因为数组在内存中连续存储,通过索引直接定位,时间复杂度 O (1);
  • 缺点:增删慢!如果在中间插元素,后面的元素都得往后挪,比如数组[1,2,3]插个 4 到中间,就变成[1,4,2,3],2 和 3 都要移动。

代码案例:

List<String> list = new ArrayList<>();
list.add("苹果");  // 末尾加元素
list.add(1, "香蕉");  // 下标1的位置插入
System.out.println(list.get(0));  // 用索引查元素,输出“苹果”
list.remove(1);  // 删除下标1的元素

1.2 LinkedList

------增删快、查询慢的 “链表”

LinkedList 底层是双向链表,每个元素像个 “小火车车厢”,除了存数据,还带着前后 “钩子”(指针)

  • 优点:增删快!中间插元素只需改前后指针,不用移动其他元素,比如链表1->2->3插个 4,改成1->4->2->3就行;
  • 缺点:查询慢!找第 n 个元素得从第一个开始挨个往后数,时间复杂度 O (n)。

代码案例:

LinkedList<String> list = new LinkedList<>();
list.addFirst("头");  // 头部加元素
list.addLast("尾");   // 尾部加元素
System.out.println(list.getFirst());  // 取头部元素
list.removeLast();    // 删除尾部元素

1.3 Vector

------线程安全的 “老古董”

Vector 和 ArrayList 类似,也是动态数组,但它的方法大多加了synchronized(同步锁),多线程环境下用着安全。不过单线程下性能不如 ArrayList,现在基本被Collections.synchronizedList(new ArrayList<>())替代了。

二、Set接口

------无序、不可重复的 “聚宝盆”

Set 接口也是 Collection 的 “孩子”,但和 List 性格完全不同:

--无序:存的顺序和取的顺序没关系(LinkedHashSet 除外);
--无索引:不能用下标访问,只能遍历;
--不可重复:相同元素只能存一次,比如set.add("a"); set.add("a");最终只有一个 "a"。

2.1 HashSet

------用哈希表实现的 “去重小能手”

HashSet 底层是哈希表,判断元素是否重复靠两个方法:hashCode()equals()

--存元素时,先算元素的哈希值(hashCode()),找对应的 “坑位”;
--如果 “坑位” 已有元素,再用equals()比较,相同就不存,不同就 “挂” 在后面(哈希冲突处理)。

代码案例:

Set<String> set = new HashSet<>();
set.add("张三");
set.add("张三");  // 重复,添加失败
set.add(null);
set.add(null);    // 重复,只存一个null
System.out.println(set.size());  // 输出2("张三"和null)

注意:

存自定义对象(比如 Student)时,必须重写hashCode()和equals(),否则去重失效!

2.2 TreeSet

------自动排序的 “整理小助手”

TreeSet 底层是红黑树(一种排序树),元素会自动按规则排好序。

排序规则有两种:

--自然排序:元素类实现Comparable接口,重写compareTo()方法;
--比较器排序:创建 TreeSet 时传Comparator对象,自定义排序逻辑。

代码案例:

        --自然排序

// Student类实现Comparable接口
class Student implements Comparable<Student> {String name;int age;@Overridepublic int compareTo(Student o) {return this.age - o.age;  // 按年龄升序}
}Set<Student> set = new TreeSet<>();
set.add(new Student("张三", 20));
set.add(new Student("李四", 18));
// 遍历会输出:李四(18)、张三(20)(按年龄排好了)

2.3 LinkedHashSet

------有序的 “HashSet 升级版”

LinkedHashSet 是 HashSet 的子类,底层多了个链表记录插入顺序,所以既能去重,又能保证 “存啥顺序,取啥顺序”。性能比 HashSet 稍差,但在需要顺序的时候很有用。

代码案例:

Set<String> set = new LinkedHashSet<>();
set.add("b");
set.add("a");
set.add("c");
// 遍历输出:b、a、c(和插入顺序一致)

三、应用选择

有序用 List,去重用 Set;查多用 ArrayList,增删多用 LinkedList;需要排序用 TreeSet,要顺序去重用 LinkedHashSet

总结:

集合特点场景举例
ArrayList查快增删慢、有序重复存班级名单,频繁查询
LinkedList增删快查慢、有序重复实现队列 / 栈,频繁加减元素
HashSet无序去重、效率高存用户 ID,需要去重
TreeSet自动排序、去重存成绩,需要按分数排序
LinkedHashSet有序去重存操作日志,保留顺序

好了,我们今天的内容就到这里了,感谢大家的观看。

http://www.dtcms.com/a/439956.html

相关文章:

  • 做网站排名要懂那些做网站需要了解什么软件
  • 莆田做网站排名装修十大风格
  • 域名备案后怎样做网站有什么做家纺的网站
  • 网络公司 网站源码青岛做网站公司电话
  • 悬浮网站右侧带鼠标经过二维码显示特效代码做网站设计赚不赚钱
  • 网站建设 微信公众号html做的网页怎么变成网站
  • 我的世界服务器赞助网站怎么做十大编程语言
  • 找婚庆公司去什么网站做网站什么软件好
  • 地坪网站建设贵州省赤水市代码
  • 哪个网站做欧洲旅游攻略好中国做趋势的网站
  • 友情链接的网站淘宝导购网站源码
  • 整站网站优化价格珠海建网站的网络公司
  • 城镇建设周刊网站怎样免费建立个人网站
  • [光学原理与应用-476]:不同检测设备(如 KLA、Hitachi、Nova)使用的具体波长配置和技术路线。
  • 深圳网站设计制ui设计是做什么工作
  • .net网站品牌网站建设 蝌蚪小7
  • 高唐住房建设局网站公司起名大全免费版
  • 扩散模型在单图像去雾领域的研究现状
  • 精品国内网站建设常熟祥云平台网站建设
  • 用v9做的网站上传服务器网站建设系统多少钱
  • 网站建设及域名申请 厦门泉州小程序开发科技公司
  • [特殊字符] 灵感捕手 | APP 界面设计灵感速递
  • 强化学习入门(1):概念、Sarsa、Q-Learning、Dyna-Q
  • linux 网站配置wordpress播放器mu38
  • 圣耀做单网站什么是网站主机
  • 网站权重一般有几个等级潍坊人才招聘网
  • 想自己做衣服上哪个网站学福州网站建设咨询
  • 能注册账号的网站模板钱包网站开发
  • 思途旅游网站建设系统做网站怎么买服务器
  • 社区门户网站规范化建设网站设计论文总结