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 ...
随机推荐
- jquery制作选项卡
思路:点击按钮后,先让所有的按钮的class属性都为“”,所有的div的display样式都为none:再让当前被点击按钮的class属性为active,以及所对应的div的display样式为blo ...
- Struts01---入门小案例
创建web项目 实现的效果! 用户点击页面不同的链接,后台调用不同的代码! 创建两个类实现共同的接口! public interface Action { String execute(); } ...
- dojo学习教程
Dojo 作为最著名的 Ajax 开源项目之一,不仅让 Web 程序员可以免费获得和使用其框架进行 Web 应用的开发,更吸引了大量的开发者对其不断的扩充,开发新的组件.DojoX 就是在这样的开发社 ...
- Http权威指南(报文)
1.报文的组成 报文由 起始行.首部.主体(可选)组成 请求报文: <method> <request-URL> <version> <headers> ...
- HAWQ取代传统数仓实践(十七)——事实表技术之累积度量
累积度量指的是聚合从序列内第一个元素到当前元素的数据,例如统计从每年的一月到当前月份的累积销售额.本篇说明如何在销售订单示例中实现累积月销售数量和金额,并对数据仓库模式.初始装载.定期装载做相应地修改 ...
- Android 进阶10:进程通信之 Messenger 使用与解析
读完本文你将了解: Messenger 简介 Messenger 的使用 服务端 客户端 运行效果 使用小结 总结 代码地址 Thanks 前面我们介绍了 AIDL 的使用与原理,这篇文章来介绍下 A ...
- CRC-16校验原理
最详细易懂的CRC-16校验原理(附源程序) 1.循环校验码(CRC码): 是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. 2.生成CRC码的基本原理: 任意一 ...
- HihoCoder - 1236 Scores (五维偏序,分块+bitset)
题目链接 题意:给定n个五维空间上的点,以及m组询问,每组询问给出一个点,求五个维度都不大于它的点有多少个,强制在线. 神仙题 单独考虑每个维度,把所有点按这个维度上的大小排序,然后分成T块,每块用一 ...
- iOS6和iOS7代码的适配(5)——popOver
popOver这个空间本身是iPad only的,所以iPhone上见不到,我记得微信上有个这样的弹出框,有扫一扫等几个菜单项,估计这是腾讯自己实现的,用于菜单的扩展. popOver从iOS6到iO ...
- vba传递参数类型错误
先来看看微软官方的说明: 目录内容 概要 解决方案 详细信息 重现问题的步骤 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; ...