IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【Java集合】集合选型规则、Collections工具类、Comparable和Comparator的区别 -> 正文阅读

[数据结构与算法]【Java集合】集合选型规则、Collections工具类、Comparable和Comparator的区别

一、集合选型规则

根据业务分析:
① 先判断存储对象的类型(一组对象或一组键值对)

② 一组对象:Conllection接口

允许重复:List

增删多LinkedList 【底层是双向链表】
改查多ArrayList 【底层是Object类型的可变数组】

不允许重复:Set

无序HashSet 【底层是HashMap,是数组+链表+红黑树】
排序TreeSet 【底层是TreeMap,是红黑树,默认排序或者自定义排序】
插入和取出顺序一致LinkedHashSet 【底层是LinkedHashMap,是数组+双向链表】

③ 一组键值对:Map接口

键无序HashMap 【底层是哈希表,JDK7:数组+链表;JDK8:数组+链表+红黑树
键排序TreeMap 【底层是红黑树,默认排序或者自定义排序】
键插入和取出顺序一致LinkedHashMap 【底层是数组+双向链表】
读取文件Properties

二、Collections工具类

java.utils.Collections是集合工具类,用来对集合进行操作。

常用方法

reverse(List<?> list) :反转集合中元素的顺序。
shuffle(List<?> list):打乱集合顺序。

sort(List<T> list):将集合中元素按照默认规则排序。
sort(List<T> list,Comparator<? super T>):将集合中元素按照指定规则排序。

涉及到了Comparator接口,位于位于java.util包下,排序是comparator能实现的功能之一,该接口代表一个比较器,比较器具有可比性。
.
int compare(String o1, String o2):比较其两个参数的顺序。
两个对象比较的结果有三种:大于,等于,小于
如果要按照升序排序,则o1小于o2,返回负数,相等返回0,01大于02返回正数
如果要按照降序排序,则o1小于o2,返回正数,相等返回0,01大于02返回负数

swap(List<?> list, int i, int j) :交换集合中指定位置的元素。

max(Collection<? extends T> coll) :根据其元素的自然顺序返回给定集合的最大元素。
max(Collection<? extends T> coll, Comparator<? super T> comp) :根据指定的比较器引发的顺序返回给定集合的最大元素。

min(Collection<? extends T> coll) :根据其元素的自然顺序返回给定集合的最小元素。
min(Collection<? extends T> coll, Comparator<? super T> comp) :根据指定的比较器引发的顺序返回给定集合的最小元素。

frequency(Collection<?> c, Object o) :返回集合中元素出现的次数。

copy(List<? super T> dest, List<? extends T> src) :将所有元素从一个列表复制到另一个列表中。

dest的长度需要大于等于src的长度。否则抛出索引越界异常。

replaceAll(List<T> list, T oldVal, T newVal) :将列表中一个指定值的所有出现替换为另一个。

addAll(Collection<T> c, T... elements):往集合中添加一些元素。

三、Comparable和Comparator的区别:

Comparable:强行对实现它的每个类的对象进行整体排序。

这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

Comparator:强行对某个对象进行整体排序。

可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

如果在使用的时候,想要独立的定义规则去使用 可以采用Collections.sort(List list,Comparetor<T> c)方式,自己定义规则:

Collections.sort(list, new Comparator<Student>() {
   @Override
   public int compare(Student o1, Student o2) {
       return o2.getAge()-o1.getAge();//以学生的年龄降序
  }
});

如果想要规则更多一些,可以参考下面代码:

Collections.sort(list, new Comparator<Student>() {
           @Override
           public int compare(Student o1, Student o2) {
               // 年龄降序
               int result = o2.getAge()-o1.getAge();//年龄降序
               if(result==0){//第一个规则判断完了 下一个规则 姓名的首字母 升序
                   result = o1.getName().charAt(0)-o2.getName().charAt(0);
              }
               return result;
          }
      });
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:24:47  更:2022-04-15 00:25:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:28:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码