总结-集合
- 集合的概述
(1) 数组是一个容器,存储同一种类型固定大小的一组值
① 基本类型的数组,元素中直接存储值
② 引用类型的数组,元素中存储对象的引用
③ 优点:连续空间,遍历速度快
④ 缺点:随机添加和删除,操作复杂.大小固定,扩容和复制内存浪费
(2) 集合也是一个容器,存储不同类型(引用类型)的多个值,不存储基本类型的数据
① 集合中的值都是引用类型的数据
② 可以根据数值大小调整空间大小
- Java中集合框架包含哪些内容:java.util.*;
(1) 接口
① Collection:元素特点无序可重复
② List继承自Collection接口:有序,可重复
1) 有序:读取顺序与存入顺序一致
2) List集合中的元素是有下标的,下标从0开始
③ Set接口继承自Collection接口:无序不可重复
④ Map接口,以key和value成对的方式存储,key无序不可重复;value:无序可重复的;key和value映射是唯一的
(2) 实现类
① List实现类
1) ArrayList
- 以数组的方式存储元素,遍历速度快,随机的添加和删除元素速度慢
- 初始容量 10; 扩容1.5倍
2) linkedList
- 以链表的方式存储元素;优点随机的添加和删除速度快,遍历的速度慢
3) Vector和ArrayList的区别
- 相同点:都是以数组的方式存储数据
- 不同点:Vector是多线程同步的,速度慢;ArrayList是多线程不同步的,线程不安全的,速度快
② Set实现类
1) HashSet
- 是无序不可重复的;以哈希散列表的方式存储数据(哈希散列表是以一维数组+单向链表)
a) 元素必须为同一种类型,否则引发异常
b) 添加元素时元素不能为空,否则引发异常
- HashSet中去除重复项不是按引用去除的,是按内容去除重复的;
- HashSet去除重复项的步骤:
a) 调用元素的hashCode,如果hashCode值不相等,则为不重复的值,可以添加
b) 如果hashCider值相等,调用 == ,结果为true,则重复
c) == 结果为false,调用equals方法,true重复,false不重复
- 在HashSet中添加自定义元素时,此类中必须重写hashCode和equals方法;
2) SortedSet:对元素进行升序排序的,按照一定的规则
- TreeSet:继承自SortedSet,其内部元素也是按照一定的规则进行升序排序的,但元素是不可重复的;存储方式为二叉树存储
③ Map的实现类
1) HashMap
- Key是唯一的,不可重复,以哈希散列表的方式存储数据
2) HashTable
- Properties
a) 可以保存在流中,或者从流中加载,属性列表中每个链及其对应值都是一个字符串;
b) Key和value都是string类型,从IO流中加载,存储IO中属性列表,做加载配置文件使用
- HashTable和HashMap的区别:HashMap是线程不安全的,速度要优于HashTable
3) SorteMap:key按照一定的规则升序排序
- TreeMap:key按照一定的规则升序排序,以二叉树的方式存储数据
(3) 算法类
① Collections
(4) 学习集合
① 学习集合中元素进行操作:增删改查
② 遍历集合中的元素
- 集合的集成关系
- Collection中常用的方法:无序,可重复
(1) 增:add(Object obj)
(2) 删除:remove(Object obj)
① 删除是调用字符串的equals方法进行比较并删除的,equals是对元素本身内容进行比较的
(3) 查:contaions(Object obj)
(4) Size() 返回集合中元素的个数
(5) Clear() 清空集合内所有元素,但保留集合本身
(6) isEmpty() 判断集合内是否有元素,集合是否为空
(7) 集合的遍历
① iterator() :返回此集合的元素上进行迭代的迭代器
② 使用forech遍历集合
- List中常用方法及实现类
(1) 增:add(Object obj) :向集合的结尾处添加元素
增:add(int index, Object obj):向指定的下标处添加元素
(2) 删:remove(Object obj) :删除集合中的元素,因为是有序可重复,所以会删除先找到的第一个元素,如果指定元素不存在返回false
在list中删除Integer类型的值时不能直接写为值,要先对integer类型的值先进行装箱再进行操作( integer.valueOf(123) )
删:remove(int index) : 指定元素下标删除元素
(3) 改:set(int index , Object obj) : 修改指定下标位置元素为Object obj
(4) 查:contains(Object obj) 根据字符串的equals方法进行查找
查:Object get(int index) 获取指定下标处的元素
(5) Size() 返回集合中元素的个数
(6) Clear() 清空集合内所有元素,但保留集合本身
(7) isEmpty() 判断集合是否为空
(8) 集合的遍历
① Iterator() 迭代器进行遍历
② Forech 进行遍历
③ For 循环进行遍历(因为List集合是有下标的,所以可以使用for循环进行遍历)
④ ListIterator list专有的迭代器,列表迭代器
(9) 排序:List集合中没有提供排序的方法,但是在java.util.Collections算法类中提供了list的排序方法;sort(List<T>list) 根据元素的自然顺序,对指定列表进行升序排序;sort(List<T>list,Comparator c ) 根据比较器产生的顺序对指定列表进行排序.这两个方法只是对list集合内的元素进行排序,不会去除重复项.
- 泛型(钻石表达式) : 继承了数组中类型同一的优点
(1) 泛型:泛指某一种类型,指定集合中存储元素的类型
(2) 如果集合中存放泛型之外的类型的数据,就会报编译错误
(3) 指定泛型之后不再需要各种类型转换
- Set集合的实现类及特点:继承自Collection
(1) 特点:无序,不可重复
(2) 元素可以按照一定的规则进行排序
① 自然排序法:实体类实现comparable接口,重写compareTo方法,书写排序规则
② 使用自定义比较器进行排序 : 创建set集合时提供Comparator(强行对某个对象进行整体排序的比较函数)进项排序
1) 创建一个自定义比较器:类 implement Compartor,并重写compare方法
Compare(Object o1,Object o2):根据第一个参数小于.等于.或大于第二个参 数分别返回负整数零和正整数
2) 把比较器规则告诉集合
New TreeSet( Compartor )
(3) 增删查方法都是继承自Collection
- Map集合的实现类及特点
(1) 增 : put(key,value)
(2) 删 : value remove(key)
(3) 改 : put(key,value)
(4) 查 : containskey(key) - 查找key是否存在
containsValue(value) - 查找value是否存在
Value get(key) - 根据key返回映射关系中的value
(5) 遍历方法
① keySet() : 返回所有key的集合,set格式
② Values() : 返回所有value的集合,Collection格式
(6) 排序 : TreeMap实现SortedMap接口:该映射是根据key的自然顺序进行排序的,或者根据在通常创建有序映射时提供的Comparator进行排序.当有比较器之后如何判断是用比较器进行比较还是用自然排序进行比较,是根据传递的参数中是否有比较器,如果参数不为空有比较器,就按比较器进行比较,如果传递的比较器参数为空,就按照自然排序进行比较.
(7) TreeMap以二叉树的方式进行存储.按key的大小进行存储,key有一定的顺序
- Forech
(1) 语法:遍历数组或集合中的元素,在forech内部已经实现了迭代器
(2) For(数据类型 变量名 : 集合或数组名 ) { }
(3) 注意:变量名的数据类型与集合元素或数组元素类型一直;变量名仅可以在此循环内部使用,且变量名不可以在此循环外声明

浙公网安备 33010602011771号