集合: List和Set
时间:2020-05-21
本文章向大家介绍集合: List和Set,主要包括集合: List和Set使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
集合
java.util.Conllection
作用是用来存储多个数据, 集合中把每个数据叫元素
和数组的比较:
- 类型: 数组只能存相同类型的数据. 集合可以是多种数据类型
- 长度: 数组一旦创建长度就不能改变, 集合长度改变
- 遍历: 数组常用下标遍历, 方式单一. 插入, 删除操作繁琐. 集合则更加方便
集合的继承结构:
Conllection
(接口)List
(接口)ArrayList
(实现类)LinkedList
(实现类)
Set
(接口)HashSet
(实现类)TreeSet
(实现类)
如图:
Collection接口常用方法 (子类通用)
返回值 | 方法 | 说明 |
---|---|---|
boolean | add(E e) | 添加元素(泛型) |
void | clear() | 清空集合, 移除集合所有元素 |
boolean | contains(Object o) | 判断是否包含指定元素, 存在返回true, 否则返回false |
int | hashCode() | 返回集合在内存中的哈希码 |
boolean | isEmpty() | 是否为空, 是为true, 否则为flase |
boolean | remove(Object o) | 移除指定元素, 移除成返回true, 否则返回false |
int | size() | 返回集合的大小 |
Object[] | toArray() | 把集合转为数组 |
boolean | addAll(Collection c) | 把c集合中的所有元素都添加进来, 添加成功为true |
boolean | containsAll(Collection c) | 如果集合包含c, 则返回true |
boolean | removeAll(Collection c) | 删除c中包含的所有元素, 删除成功返回boolean (交集) |
boolean | retainAll(Collection c) | 只保留集合中 c 包含的元素, 其余元素全部删除 (差集) |
Iterator | iterator() | 返回一个迭代器, 用来迭代(遍历)数组(使用方法如下) |
注意: iterator() 迭代方法使用
Collection c = new ArrayList();
c.add("艾迪");
c.add("杰克");
c.add("迪迦");
c.add("泰罗");
Iterator<String> it = c.iterator();
while (it.hasNext()) {// hasNext() 用来判断集合中是否还有下一个元素, 有就返回true
String value = it.next(); // 获取元素'
System.out.println(value);
}
结果:
艾迪
杰克
迪迦
泰罗
List (接口)
特点: 有序, 可重复, 有索引
List常用特有方法
返回值 | 方法 | 说明 |
---|---|---|
void | add(int index, E e) | 在指定下标处插入 |
boolean | addAll(int index, Collection c) | 插入一个集合到指定下标 |
E | get(int index) | 使用下标获取元素 |
int | indexOf(Object o) | 返回第一次出现指定元素的索引值 |
int | lastIndexOf(Object o) | 返回最后一次出现指定元素的索引 |
E | remove(int index) | 移除指定索引的元素, 并返回元素的值 |
ListIterator |
listIterator() | 获取迭代对象, 实例看下面, 拥有(向前遍历, 向后遍历等特有方法) |
E | set(int index, E e) | 替换指定下标的元素 |
List |
subList(int fromIndex, int toIndex) | 按下标截取集合, 包含头, 不包含尾 |
listTerator()方法的使用
// 定义list...略
ListIterator<String> it2 = list.listIterator();
while (it2.hasNext()) { // 向后判断, 有没有元素
String value = it2.next(); // 获取后面的元素
System.out.println(value);
}
ArrayList(实现类)
特点:
- 是list接口的实现类, 拥有list接口的特点, 有序, 有索引, 底层使用数组实现, 方便查询
- 可以使用
Collection
抽象类和List
接口的通用方法
常用构造方法
方法 | 说明 |
---|---|
ArrayList() | 无参构造 |
常用特有方法
无
注意: remove() 可以按照下标删除, 也可以直接指定元素值, 如果元素是Integer类型, 哪么可能会出现意外的结果
如下实例:
// 创建ArrayList对象
List<Integer> a1 = new ArrayList<>();
a1.add(1);
a1.add(2);
a1.add(3);
a1.add(4);
a1.add(100);
// remove() 可以按照下标删除, 也可以直接指定元素值
System.out.println(a1.remove(2)); // 按照下标删除
System.out.println(a1.remove(Integer.valueOf(100))); // 按照元素进行删除
由上例可见: 直接传入数字会默认按照下标进行删除, 只有传入包装类型的时候才会按元素删除
LinkedList(实现类)
特点:
- List接口的实现类, 拥有List接口的特点, 可以重复, 有索引, 有序, 底层是一个链表结构的实现. 查询比
ArrayList
复杂, 但是适用于增删业务 - 可以使用
Collection
抽象类和List
接口的通用方法
常用构造方法
方法 | 说明 |
---|---|
LinkedList() | 无参构造 |
常用特有方法
返回值 | 方法 | 说明 |
---|---|---|
void | addFirst(E e) | 添加首元素 |
void | addLast(E e) | 添加尾元素 |
E | getFirst() | 获取首 元素 |
E | getLash() | 获取尾元素 |
E | removeFirst() | 移除首元素, 并返回被移除元素的值 |
E | removeLash() | 移除尾元素, 并返回被移除元素的值 |
Set(接口)
set是一个不包含重复元素的集合, 至少包含一个null, set中不能存放重复元素, 常用来去重
注意: 去重自定义对象的时候, equals()和hashCode()必须都重写, 这样的话才可以识别两个对象是否相等, 才能达到去重的目的
- hashCode() 是为了让底层运算哈希值是, 可以根据对象的属性值运算, 如果两个对象的属性值一样, 就可以认为是相等的hash值
- equals() 是为了让底层在判断两个对象是否相等时, 让equals()返回true
Set接口的特点: 不重复, 无序, 无索引
Set接口几乎没有特有常用方法, 主要继承使用Collection的方法
HashSet(实现类)
HashSet是Set接口的实现类, 可以使用Set接口的所有功能, 拥有Set接口的特点, 数据无序, 不重复, 无索引
HashSet底层是哈希表(也叫散列表). 实际上底层维护了一个HashMap
常用构造器
方法 | 说明 |
---|---|
HashSet() | 无参构造 |
特有方法
同Set接口的方法
原文地址:https://www.cnblogs.com/zpKang/p/12928494.html
- Kafka源码系列之分组消费的再平衡策略
- Kafka源码系列之Consumer高级API性能分析
- Kafka源码系列之源码解析SimpleConsumer的消费过程
- Spark调优系列之序列化方式调优
- Spark源码系列之foreach和foreachPartition的区别
- kafka源码系列之mysql数据增量同步到kafka
- Hbase源码系列之BufferedMutator的Demo和源码解析
- Kafka源码系列之0.10版本的Producer源码解析及性能点讲解
- Spark源码系列之spark2.2的StructuredStreaming使用及源码介绍
- Hbase源码系列之scan源码解析及调优
- spark源码系列之内部通讯的三种机制
- Hbase源码系列之regionserver应答数据请求服务设计
- 大数据基础系列之kafkaConsumer010+的多样demo及注意事项
- 大数据基础系列之kafka011生产者缓存超时,幂等性和事务实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法