java成神之——集合框架之ArrayList,Lists,Sets
集合
集合种类
List<String> list = new ArrayList<>(data);
Set<String> set1 = new HashSet<>(data); // 值不重复
SortedSet<String> set2 = new TreeSet<>(data); // 值有序并且不重复
Set<String> set3 = new LinkedHashSet<>(data); // 值顺序固定并且不重复
Map<String, Object> map1 = new HashMap<>(map);
SortedMap<String, Object> map2 = new TreeMap<>(map);
ArrayList
声明
ArrayList是顺序表,增删慢,查询快,有序可重复集合
只能用来存储自定义应用类型和包装类型 Byte Short Integer Long Float Double Character Boolean
List list = new ArrayList();
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<>();
ArrayList<Integer> arr = new ArrayList<Integer>();
增删改查元素
List<Integer> list = new ArrayList<Integer>();
List<Integer> list1 = new ArrayList<Integer>();
list.add(1);
list1.add(2);
list.addAll(list1);
list.add(11);
list.add(1, 33);
list.set(0, 33);
list.remove(0);
list.clear();
list.get(0)
list.size()
遍历几种方式
第一种
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
list.forEach(System.out::println);
第二种
list.parallelStream().forEach(System.out::println);
第三种
for (String item : list) {
System.out.println(item);
}
第四种
ListIterator<String> iterator = list.listIterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
空集合
List<String> anEmptyList = Collections.emptyList();
Map<Integer, Date> anEmptyMap = Collections.emptyMap();
Set<Number> anEmptySet = Collections.emptySet();
子集合
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
List<String> list1 = list.subList(0,2); // [a, b]
不可变集合
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
List<String> list1 = Collections.unmodifiableList(list); // 不能修改值
List<String> unmodifiableList = Collections.singletonList("Only string in the list"); // 只有一个元素的不可变集合
LinkedList
链表,增删快,查询慢
LinkedList<String> arr = new LinkedList<String>();
arr.add("a");
arr.addLast("c");
arr.addFirst("b");
arr.getFirst();
arr.getLast();
arr.removeFirst();
arr.removeLast();
arr.clear();
Lists
排序
方式一,实现Comparable接口
public class User implements Comparable<User> {
private Integer id;
private String name;
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
@Override
public int compareTo(User u) {
return id.compareTo(u.id);
}
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
List<User> users = new ArrayList<User>();
users.add(new User(1, "小李"));
users.add(new User(2, "小红"));
Collections.sort(users);
第二种,传递Comparator接口实现
Collections.sort(users, new Comparator<User>() {
@Override
public int compare(User s, User e){
return s.getId().compareTo(e.getId());
}
});
第三种,lambda表达式
Collections.sort(users, (s, e) -> s.getId().compareTo(e.getId()));
第四种,实现类sort
users.sort((s, e) -> s.getId().compareTo(e.getId()));
类型转换
List<Integer> nums = Arrays.asList(1, 2, 3);
List<String> strings = nums.stream().map(Object::toString).collect(Collectors.toList());
取交集
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1.addAll(Arrays.asList(new Integer[]{1,2,3}));
list2.addAll(Arrays.asList(new Integer[]{1,2,4}));
list1.retainAll(list2);
移动元素
Collections.reverse(list); // 反转
Collections.rotate(list1, 1); // 集合元素整体循环后移一位
Collections.shuffle(list1); // 重排元素
Random random = new Random(12);
Collections.shuffle(list1, random); // 随机重排,只会随机一次
删除交集元素
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1.addAll(Arrays.asList(new Integer[]{1,2,3}));
list2.addAll(Arrays.asList(new Integer[]{1,2,4}));
list1.removeAll(list2); // [3]
Sets
集合特点
Hash集合底层数据结构是散列表,所以要求元素必须不重复,避免地址对应冲突
Hash集合访问的直接是数据地址,查询元素最快,增删元素也快
HashSet集合处理地址冲突的方法使用开放定址法
HashSet是无序无重复元素集合,使用方法和ArrayList类似
LinkedHashSet集合处理地址冲突的方法使用链地址法
Set<T> set = new HashSet<T>(); // 快速定位,随机排序
TreeSet<T> sortedSet = new TreeSet<T>(); // 按照compareTo排序,操作慢
LinkedHashSet<T> linkedhashset = new LinkedHashSet<T>(); // 快速定位,按照插入顺序排序,备份慢
常用方法
set.add(12);
set.clear();
set.contains(0);
set.isEmpty();
set.remove(0);
set.size();
根据set创建list
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
方式一
List<String> list = new ArrayList<String>();
list.addAll(set);
方式二
List<String> list = set.stream().collect(Collectors.toList());
结语
本文章是java成神的系列文章之一
如果你想知道,但是本文没有的,请下方留言
我会第一时间总结出来并发布填充到本文
java成神之——集合框架之ArrayList,Lists,Sets的更多相关文章
- java成神之——集合框架之队列,栈,集合并发
集合 队列和双端队列 PriorityQueue Deque BlockingQueue Queue 栈 集合并发 线程锁 线程安全集合 结语 集合 队列和双端队列 PriorityQueue 此队列 ...
- java成神之——集合框架之Maps,Hashtable
集合 Maps HashMap 创建和初始化map 遍历方式 LinkedHashMap WeakHashMap TreeMap 线程锁 Hashtable 结语 集合 Maps HashMap Ma ...
- java成神之——集合框架之Array
Array 初始化 填充元素的几种方式 数组转流 遍历 数组转成字符串 排序 查找 数组扩大 原始类型数组和包装类型数组转换 移除元素 比较数组是否相等 克隆 类型转换 过滤元素 结语 Array 初 ...
- Java集合框架之ArrayList浅析
Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...
- java成神之——Stream和Optional
Stream流 基本使用 流关闭 平行流 流重用 iterator转换成流 分组计数 无限流 流转集合 压缩流 统计数值流 集合转换流遍历 流拼接 reduce 使用流生成随机字符串 流的包装流 几种 ...
- java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作
ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...
- Java成神路上之设计模式系列教程之一
Java成神路上之设计模式系列教程之一 千锋-Feri 在Java工程师的日常中,是否遇到过如下问题: Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式? 什么是设计模式?你是否在 ...
- java成神之——文件IO
文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...
- java成神之——properties,lambda表达式,序列化
Properties 加载defaults.properties文件 写Properties到xml文件 读Properties从xml文件 Lambda表达式 自定义 内置 sort方法中使用Lam ...
随机推荐
- python----模块知识拓展
1.hashlib ------configpraser-------- xml hashlib 模块导入:import hashlib 模块说明:用于将信息加密,明文变成密文 功能说明 MD5算法 ...
- softmax回归(理论部分解释)
前面我们已经说了logistic回归,训练样本是,(且这里的是d维,下面模型公式的x是d+1维,其中多出来的一维是截距横为1,这里的y=±1也可以写成其他的值,这个无所谓不影响模型,只要是两类问题就可 ...
- Android开发调试中遇到的Waiting for HOME解决方案
显示问题如图: 基本解决思路:在AVD里面单独启动运行一次模拟器,然后尝试运行程序,基本会解决这个问题.
- 实验二. 使用LoadRunner进行压力测试
实验二. 使用LoadRunner进行压力测试 一. LoadRunner 概要介绍 1.1简介 LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具.通过以模拟上千万用户实 ...
- shell编程实例1
1.vim hello.sh 2. #!bin/bash echo "hello world!" 3.chmod +x hello.sh 4.source hello.sh ls ...
- 内存保护机制及绕过方案——通过覆盖虚函数表绕过/GS机制
1 GS内存保护机制 1.1 GS工作原理 栈中的守护天使--GS,亦称作Stack Canary / Cookie,从VS2003起开始启用(也就说,GS机制是由编译器决定的,跟操作系统 ...
- 条款19:定义class就相当于定义一个个的内置类型
下面的条框应该是谨记的: 1. 新的type应该如何创建与销毁 2. 对象的初始化与赋值应该有什么样的区别 3. 新type的对象如果被pass-by-value,有什么影响? 4. 什么事新type ...
- Go标准容器之List
简介Go的标准包container中包含了常用的容器类型,包括conatiner/list,container/heap,container/ring.本篇介绍conatiner/list. cona ...
- 【转】程序员应该了解的——除了coding我们还有很多事要做
from : http://www.cnblogs.com/lingyun1120/archive/2011/10/09/2203306.html try { if (you.believe(it) ...
- SGU 507 Treediff
这个题目 其实可以暴力 用两个 set 合并: 每次放进去一个元素只要找到这个元素第一个比他大的元素和最后一个比他小的元素:然后更新最优值: 证明为什么不会超时: 假如最后集合的小的为 S1,大 ...