集合框架精讲

   日期:2024-12-27     作者:hubinusb       评论:0    移动:http://w.yusign.com/mobile/news/5948.html
核心提示:集合 ​ 集合本身是个对象(集合类的具体对象),作用是方便对多个对象进行操作 集合和数组的区别 ​ 只能存放对象 //不能是

集合

​ 集合本身是个对象(集合类的具体对象),作用是方便对多个对象进行操作

集合和数组的区别

​ 只能存放对象 //不能是基本数据类型,但可以是包装类

​ 存放的元素可以是多种类型 //默认是Object,如果放入泛型,只能放泛型指定的对象作为元素

​ 长度是可变的 //可以增删,集合中元素被删除后, 后面的元素会向前进1

Collection
接口特点

​ 元素是object类型(基本数据类型不能放入,需要改成包装类)

基本操作

​ add remove clear contains(比较的是equals) size isEmpty

两个集合间的基本操作

​ addAll removeAll containsALL retainAll 取交集

遍历

​ toArray方法(集合转数组) iterator方法(迭代器) foreach方法

​ 由于collection是单列集合的根接口,其子类都可以这样进行遍历

 
List
接口特点

​ 可重复,有序

​ //可以使用索引查询元素 可以用于遍历 list.get(index) list.set(index,object)

基本操作

​ add(index,object) //挤进去 同时也有add(object)

​ remove (index) //同时也有remove(object),删除元素后,后面元素向前进1

get(index) //用于遍历集合 set(index,object) //修改元素

​ ListIterator 迭代器

遍历、去重、排序

​ list.get(index) ListIterator + collection的三种

​ 去重使用set集合,依据hashcode和equals

​ 排序使用集合工具类的sort方法

实现类

​ Arrayslist 底层是数组 增删慢,查找快

​ LinkedList 底层是链表 增删块,查询慢

 
list遍历和去重的例题

​ 1.获取Person集合中年龄大于20的对象的集合

 
  1. 对list中的元素去重;两种方法,后面还有用set去重的方法,是最简单的,这两种只做了解
 
set
接口特点

​ 无序,不可重复 // 必须提前重写hashcode和equals

遍历、去重、排序

​ collection的三种

​ 自带去重,必须提前重写hashcode和equals

​ 排序先转为list,使用集合工具类的sort方法

实现类

​ HashSet 底层是哈希,不能保证存入和取出的顺序

​ linkedHashset 底层是哈希+链表 可以保证存入和取出的顺序

Set去重的例题
  1. 定义10个1-20之间的随机数:使用linkedhashset编写一个程序,获取10个1-20之间的随机数,要求随机数不能重复

    ​ //当时用数组做是多么的麻烦(双色球那道题),去重 选用set就很简单,然后再转回数组

 
  1. 利用set对list进行去重:给定一个Person的list集合,添加几个元素,对其去重

    //相比于上面提到的方法,这个方法不需要进行循环

 
Map
接口特点

​ key和value作为一个entry成对存在

​ key不能重复(必须提前重写hashcode和equals) ,可以为null

​ key一般较简单为了查value

基本操作

​ put(k,v) remove(k) clear() containskey(k) containsvalue(v) size()

map.get(key) 得到values map.values() 返回value的集合

遍历、去重

​ keyset entryset values

​ 自带去重,只对key去重,必须提前修改key的hashcode和equals

​ 排序 如何对values进行排序呢 entry成set,用sort排序

实现类

​ HashMap 本质是数组 其元素为链表 不能保证存入和取出的顺序

​ LinkedHashMap 可以保证存入和取出的顺序

 
 
集合和数组的相互转化
集合转数组

​ Object[] ob = list.toArray(); //返回object类型的数组,需要向下转型

数组转集合

​ list<> list= new Arraylist<>(Arrays.aslist()); //不能增加元素

list和set相互转化

​ 对list去重

​ 对set使用集合工具类进行操作

​ 如果相对list进行去重排序,可以转为treeset

 
数组工具类Arrays

​ Arrays.toString Arrays.sort 升序 Arrays.aslist() 创建数组

​ Arrays.binarysearch(arr,value) 必须先排序为升序,查找value对应的index

集合工具类Collections

只对list进行操作

sort(list) max(list/set) reverse(list) shuffle(list) 乱序

​ binarysearch(list,value) //必须先排序为升序,查找value对应的index

 
比较器
comparable

​ 内部比较器,使用Collections.sort(list)排序 ,元素所在类实现此接口并重写compareTo方法

comparator

​ 外部比较器,重写compare方法

TreeSet/TreeMap

必须传入比较器,key不能为null

​ 自带去重和排序且均按照比较器规则进行(不是equals),最好设置多个条件

集合排序例题
  1. 建立Person的list集合,先按照年龄升序;再按照name降序 (implements Comparable)
 
 
  1. 创建一个学生类,包含姓名 语文成绩 数学成绩 英语成绩 键盘录入三个学生对象,按照总分降序排序,总分相同 按照语文成绩降序排序,语文相同按照数学成绩降序排序,数学相同按照姓名升序排序
 
  1. 对TreeMap和TreeSet进行去重排序(TreeSet其实和TreeMap差不多)
 
泛型

​ 如果不加泛型,集合可以装Object(任何对象),混装;在遍历集合时取出的都是object类型,无法直接调用对象的方法,需要向下转型;

​ 主要用于限制集合中的元素类型,使集合中元素类型一致

foreach

​ 方便对集合或数组进行遍历; 其底层还是迭代器,只要实现了iterable接口就可以使用foreach

​ for(数据类型 变量i: 集合/数组

​ 需要注意,此时 变量i 就是集合或数组中的一个元素(对象)无法得到索引值

可变参数

​ 在参数列表上 (参数类型**…** a) 只能存在1个 放在最后 其本质是数组

集合的重点总结
1. 根据集合的特点,选取特定的集合进行分析

​ list 有序可重复 可用set去重 可以用集合工具类操作(排序,查找,反转 最值)

​ set 无序不可重复 常用于去重 可转为list使用集合工具类

​ map 储存键值对 key不能重复

​ Treemap 去重自动排序 根据比较器进行去重和排序(最好设置多个条件) key不能为null

2. 集合的遍历 去重 排序

集合框架精讲

​ 遍历: 集合无法像数组那样用索引取值(list除外,因此如何遍历很重要

​ collection 3种 list 5种 set 3种 map 3种(可扩展)

​ 去重: hashcode&equals (contains 方法 本质也是调用equals)

​ 排序: list和set均可以用集合工具类sort进行排序

​ TreeSet和TreeMap依据比较器进行去重和排序

3. 集合的快速遍历

​ lambda表达式

​ list.foreach(s->system.out.println(s))

     本文地址:http://w.yusign.com/news/5948.html    述古往 http://w.yusign.com/static/ , 查看更多
 
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0评论 0
 
更多>同类资讯
0相关评论

相关文章
最新文章
推荐文章
推荐图文
资讯
点击排行
{
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号