Java基础入门(十三)之常用集合

Collection集合

1.定义:

数组的长度是固定的 添加的元素如果超出 会出现异常 java给我们提供了一个集合类体系 能够存储任意对象 且长度是可变的 随着元素的增加而增加 随着元素的减少而减少

2.数组和集合的区别:

(1) 数组可以存储基本数据类型,也可以储存引用数据类型 基本数据类型存的是值,引用数据类型存的是地址值 集合中只能存储引用数据类型,也可以存基本数据类型(装箱) 可以存储任意类型
(2) 数组的长度是固定的 不能自动增长 集合的长度是可变的 根据元素的多少来决定长度

3.常用方法

基本功能
boolean add(Object obj) 添加
boolean remove(Object obj) 删除 指定的元素
void clear() 清空
boolean contains(Object obj) 包含
boolean isEmpty()是空 返回true 非空返回false
int size() 大小

带ALL的功能:
boolean addAll(Collection c) 将传入集合的每一个元素 添加到调用集合中
boolean retainAll(Collection c)取交集 将交集存储到调用集合中 没有交集 调用的集合被清空
boolean removeAll(Collection c)调用的集合中 删除了 传入集合 删除交集
boolean containsAll(Collection c) 判断调用集合 是否包含 传入集合 包含 返回true 不包含返回false

其他功能:
Object[] toArray()将集合转成数组
Iterator iterator() 通过方法的调用 获取Iterator迭代器对象

注意:不能实例化

4.遍历集合的方式

(1) 将集合转为数组
(2) 增强for循环


List

1.特点:

元素是有序的可重复有索引

2.常用方法:

增:
add(index,element)
addAll(index,Collection)
删:
remove(index)
改:
set(int index, E element)
查:
get(int index)
subList(int fromIndex, int toIndex)
其他:
ListIterator<E> listIterator()

3. ArrayList

底层是数组,长度可变,默认为10,50%延长
特点:查找和修改快,增删比较慢
注意:Collection contain remove 底层都依赖于equals方法

4.LinkedList

底层是双向链表
特点:查找修改慢,增删比较快

特有方法:
addFirst将指定元素添加到集合开头
addLast将指定元素添加到集合末尾
getLast->peekLast获取最后一个元素
removeFirst->pollFirst删掉第一个元素,返回结果本身

5.ArrayList和LinkedList的使用场景

在添加数据方面,LinkedList添加比较快
ArrayList 是个长度可变的数组,添加数据时,需要把原始数据复制到一个新的数组中,然后插入
LinkedList 是双向链表,相互引用的阶段组成的链表结构 当数据插入到某个位置时,将链表要插入位置的前后的链表指向发生改变

6.Vector

底层是数组
遍历方式 Enumeration<E> elements() 枚举遍历
特点:多线程并发访问、Vector线程安全,效率低

7.ListIterator

List 集合特有的迭代器
It.hasNext() 不能单独使用


Set

1.特点:

无序(存储顺序和底层存储顺序不一致),不可重复,无索引

2.HashSet

底层数据结构是哈希表, 把元素的哈希码值存储到集合 ,按照哈希码值排序

String类本身重写了hashCodeequals方法
根据hashCode()返回值来决定要插入的位置,如果位置上已经存在元素了,会调用equals 方法来进行比较。若相等,丢掉后来的,不相等,存储
add 在存储的时候,判断是否有,若没有添加,若有不添加返回FALSE
HashSet 根据hashCode()返回值来决定要插入的位置 若哈希码值相同,会调用equals 方法比较,若不同,则不调用
向HashSet存储自定义实体类,需要重写HashCode()equals()方法

3.LinkedHashSet

HashSet子类,底层是双向链表
特点:排重 无索引 有序(存储顺序和底层顺序一致)

4.TreeSet

结合 底层是二叉树
特点:无序 排重 无索引排序 (ascii码) 要求是存储同一种类型

如何给自定义数据类型排序:

1.让自定义类实现comparable 接口
Compare to 此对象小于指定对象,返回负整数;等于指定对象,返回0;大于指定对象,返回正整数

2.让容器具备比较性
创建TreeSet集合的同时,传入public interface Comparator 接口
重写compare方法,请是对某个对象collection 进行整体排序的比较函数

当两种方式同时存在时,最后的输出结果是Comparator的结果

5.TreeSet

是用来排序的,可以制定一个顺序,将对象存入之后,按照指定顺序排序
使用方式区别: 自然排序 比较器排序


泛型

1.定义

泛型(限定当前集合能够存储什么数据类型的元素,用<E>包裹,将运行时异常转化为编译时异常) 集合存储基本数据类型其实进行了自动装箱

2.注意事项

(1)创建对象时,前后的泛型要求保持一致,或者后面的可以省略不写
(2)泛型了<>里必须是引用数据类型
(3)泛型高级通配符

<?  extends 类名> 类以及其子类
<?  super  类名>   类以及其父类
<?>  如果没有明确,是Object类型

Map集合

1.分类

Collections
单列的,所有的数据结构针对的是元素
Map
双列的(夫妻档 有结婚证作为联系)

2.特点

(1)Map的键是唯一的,所有的数据结构针对的是Key
(2)根据Key来排重,相同键的元素在Map值存储一次 排重(存储顺序和底层顺序不一致)
(3)键和值 要求都是引用数据类型
(4)Key是无序的唯一的 value是无序的,不唯一的

3.常用功能:

(1)Put(key,value) 方法会先去集合中找键对应的值,如果有就返回,如果没有返回Null 键相同,值覆盖
(2)Get(key) 根据键获取值,有就返回,没有返回null
Int size() 获取Map中键值对的个数
(3)Boolean containsKey(key) 判断是否包含指定的键
(4)Boolean containsValue(Value) 判断是否包含指定的值
(5)Remove(key) 根据键删除键值对,返回值 没有返回空
(6)Collection(V) values() 获取集合中所有值得集合

4.遍历方式:

(1)Set<Map.Entry> entrySet() 获取key的Set集合
使用此方法获取键值对的关系,将关系存到Set集合中,然后根据关系Map.Entry的方法获取键值对
(2).Set<k> keyset()
获取Map集合中的所有Key 用get方法根据Key获取到值

5.常用子类:

(1)HashTable jdk1.0 底层是哈希表 线程安全 效率低 不可以存储null键 null 值
(2)HashMap jdk1.2 底层是哈希表(哈希算法)线程不安全 效率高 可以存储null键 null值
存储自定义数据类型 需要重写 hashCode() 和 equals()方法
(3)LinkedHashMap 底层是双向链表 有序(存储顺序 和 底层存储顺序一致)
(4)TreeMap 底层是二叉树 排序 数据结构针对的都是键 存储自定义数据类型 必须具备比较性 类 实现 Comparable接口 容器 添加 Comparator比较器

4.Collections工具类

常用方法:
(1)void sort(List) 排序
(2)int binarySearch(List,key)二分法查找指定 元素所在位置
(3)T max(Collection) 最大值
(4)void reverse(List) 反转
(5)void shuffle(List) 随机打乱顺序
(6)Comparator reverseOrder() 反转自然排序
(7)void swap(List,int i,int j)将集合中指定位置的元素进行交换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值