java集合代码示例
一、List
ArrayList
- 使用List时,最好初始化容量。
ArrayList的默认容量为10,每次扩容增0.5倍,假如要放置100个元素,需要多次扩容。
List<String> list=new ArrayList<>(100);
- String数组转List,使用Arrays.asList。
String[] stryArray=new String[]{"str1","str2","str3"};
List<String> list=Arrays.asList(strArray);
- String(以逗号隔开)转List:
public static List<String> stringToList(String strs){
if (strs==null) {
return null;
}
String[] str = strs.split(",");
return Arrays.asList(str);
}
注意,通过Arrays.asList转换的List,不可以使用add()方法。如果使用的话,会报错:java.lang.UnsupportedOperationException
可以使用以下方式在新的List中添加数据:
String[] stryArray=new String[]{"str1","str2","str3"};
List<String> list=Arrays.asList(strArray);
List<String> strList=new ArrayList<>(list);
strList.add("test");
- List转成String数组,使用toArray()方法。
List<String> list = new ArrayList<String>(2);
list.add("test1");
list.add("test2");
String[] array = new String[list.size()];
array = list.toArray(array);
- List转String,用逗号隔开的,可以使用String.join(",",list)。也可以使用其他的分隔符。
如下:
List<String> list=new ArrayList<>();
list.add("shen");
list.add("zhen");
list.add("shi");
String words= String.join(",",list);
System.out.println(words);
- List转int[]数组,使用java8的stream()。
int[] arr = list.stream().mapToInt(Integer::valueOf).toArray();
- int[]数组转List,如下:
int[] arr = {4, 5, 3, 6, 2, 5, 1};
List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
- 判断集合个数是否为空。
if (list!=null && list.size==0 ){
//...
}
更推荐的做法是:
使用apache的工具类CollectionUtils.isEmpty()。
if (CollectionUtils.isNotEmpty(list)) {
}
- 删除list中的元素:
想要遍历集合,删除元素,必须使用Iterator()。如果使用foreach(),可能会报错"ConcurrentModificationException"。
public void removeElement() {
//如果采用Arrays.asList(),是不能对集合进行增删操作的。
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (item==null) {
iterator.remove();
}
}
}
更方便的写法,如下:
public void removeElement() {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
//removeIf(),内部使用的就是Iterator()。
list.removeIf(Objects::isNull);
}
LinkedList
- 在增删比较多的场景下,使用LinkedList。
返回空的List,不要返回null。
返回null,容易导致空指针异常。
可以使用Collections.emptyList(),表示的是空集合。
示例如下:
public List<BillFiles> queryBillFiles(BillFiles billFiles) {
//以下是一个简单的数据库查询
List<BillFiles> billFilesList=billFilesMapper.queryBillFiles(billFiles);
if(billFilesList==null) {
billFilesList= Collections.emptyList();
}
return billFilesList;
}
二、Set
HashSet
- 去重:可以使用Set不重复的特性进行去重。
将集合作为HashSet()构造方法的参数。
HashSet(Collection<? extends E> c)
Set的size和原来集合的size相同,说明没有重复数据。也可以用contains()判断。
示例如下:
List<String> list=new ArrayList<>();
list.add("123");
list.add("456");
Set<String> set = new HashSet<>(list);
for (String s : set) {
System.out.println(s);
}
也可以放入map的values集合:
Map<Integer, Integer> map = new HashMap<>();
Set<Integer> set = new HashSet<>(map.values());
if( map.size() == set.size()){
}
//if(set.contains()){}
三、Map
HashMap
- 遍历HashMap,代码如下:
Map<Integer,String> map=new HashMap<Integer,String>();
map.put(1,"banana");
map.put(2,"apple");
//遍历entrySet()返回的Set,其中每一个元素都是Map.Entry类型的,再通过getKey()、getValue()获取键值对
//以下的Map为接口名,map为Map接口声明的变量。
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("键:"+entry.getKey() + ",值: " + entry.getValue());
}
map.keySet():获取所有的key
map.values() :获取所有的value
使用map.getOrDefault(Object key, V defaultValue)。如果key不存在,返回默认值。
比如,用key存储字符串,用value统计次数。如下:
Map<String, Integer> map = new HashMap<>();
String word="s";
int count=map.getOrDefault(word, 0);
map.put(word, count+ 1);
- 使用compute(),对map中的k和v进行计算。
compute(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction)
第一个参数是key,第二个参数是匿名函数式,(k,v)-> 后面就是对key和value的具体处理逻辑。
示例如下:
Map<String, Integer> map = new HashMap<>();
String word="s";
Integer count=map.compute(word,(k,v)->{
if (v==null){
return 0;
}
return v+1;
});
待补充。
java集合代码示例的更多相关文章
- java HTTP代码示例
//测试环境发送用例 @Test public void testSendForTest() { String url = "http://172.16.30.108:8138/ap ...
- Java多态——代码示例
刚开始看多态的文字定义时,总是不明白说的啥意思,看了一些示例代码后,总算知道了,其实也就是“多态”的字面意思. 如下: class A{ public void Out() { System.out. ...
- Java多线程代码示例
package algorithm; class Mythread extends Thread{ String name; public Mythread(String name){ this.na ...
- 面试半年!三面阿里,四面蚂蚁金服,居然倒在了一个Java集合之Map上?
Map接口 Map与Collection并列存在.用于保存具有映射关系的数据:key-valueMap中的key和value都可以是任何引用类型的数据Map中的key用set来存放,不允许重复,即同一 ...
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
概要 前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...
- Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...
- Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...
- Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 05 Vector详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
随机推荐
- Java打印日历表
今天来吐槽一下Java的Calendar类的使用问题,反正我是弄了半天. 首先是,遇到一个问题,输入年份和月份,需要打印这个月的日历,网上有不少代码,但我用了几个感觉都不是很靠谱. 然后经过一番探索, ...
- html5直接调用手机相机照相/录像
现在的h5功能越来越强大.之前做项目时上传功能input type=file时,在IOS下居然可以直接照相...但是在安卓上是不能.后面研究 了下,其实安卓下也可以的. 就是在input上加上capt ...
- Java 字符串(一)字符串初始化
一.String类概述 1.概述 java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例.String 是 ...
- Map去重,去重value相同的元素,保留key最小的那个值
Map<Integer,String>,Integer代表时间撮,String代表文本信息去重函数:就是删除Map中value相同的元素,只保留key最小的那个元素 public stat ...
- Vue 中 $nextTick() 的应用
Vue 在更新 DOM 时是异步执行的. 只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更.如果同一个 watcher 被多次触发,只会被推入到队列中一次.这种在缓 ...
- win10系统下安装Ubuntu18.04双系统
1.http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso下载Ubuntu 18.04镜像,准备好一个空的U盘 2.下载ru ...
- CentOS6.7搭建部署DHCP服务 (详解主配置文件)
DHCP服务 dhcp:动态主机配置协议.从bootp演变而来,引进了租约.续租功能,成为了现在的DHCP. 需要就分配,不需要就回收. 工作过程: 1.当获得地址是,有租约期限,当你关机时,IP地址 ...
- Kali 安装tightvncserver
一.软件说明 a) tightvncserver是一个轻量级,只能建立桌面,不能查看TTY7/TTY1正在显示的桌面,但x11 vnc可以,相比x11vnc 安全传输差一些.反之,x11 vnc:安全 ...
- Anaconda安装、更新第三方包
conda和pip简介 conda conda是包及其依赖项和环境的管理工具. 适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, F ...
- 关于Discuz x3.3页面空白解决方法
今天找时间分析了一下,找到了页面空白的原因,可能是因为php版本兼容性的问题所致,所以只是部分用户遇到这种情况,这里分享一下.经过分析发现是sourcefunctionfunction_core.ph ...