Java集合 之 List 集合
1.什么是Lsit集合?
List集合是一种元素有序的,可重复的集合,集合中每个元素都有自己的元素索引。List集合允许可重复的元素,可以通过索引来访问指定位置的元素。
2.Java8改进的List接口和ListIterator接口
List作为Collection集合的子接口,可以使用Collection接口的全部方法。另外,由于List是有序集合,又添加了根据索引来操纵List集合的一些方法。
void add(int index, Object element): 将元素element添加到List集合索引index处。
boolean addAll(int index, Collection c): 将Collection集合中的所有元素插入到List集合的index处。
Object get(int index): 返回索引index处的元素。
int indexOf(Object o): 返回元素o在list集合中第一次出现的位置索引。
int lastIndexOf(Object o): 返回元素o在List集合中最后一次出现的位置索引。
Object set(int index, Object element): 将位置索引为index的元素,替换为element。
List subList(int fromIndex, int toIndex): 返回List集合中从索引fromIndex到索引toIndex之间的所有元素。
java8为List集合添加了如下两个默认方法:
void replaceAll(UnaryOperator operator): 根据operator指定的计算规则来重新设置List集合的所有元素。
void sort(Comparator c):根据Comparator参数对List集合的元素排序。
public class ListTest {
public static void main(String[] args){
List s = new ArrayList();
s.add(new String("春"));
s.add(new String("秋"));
s.add(new String("冬"));
//输出:[春, 秋, 冬]
System.out.println(s);
s.add(1, new String("夏"));
s.remove(2);
//输出:[春, 夏, 冬]
System.out.println(s);
//输出:1
System.out.println(s.indexOf(new String("夏")));
s.set(1, new String("秋"));
//输出:[春, 秋, 冬]
System.out.println(s);
//输出:[秋]
//包括fromIndex本身,但不包括toFrom本身
System.out.println(s.subList(1, 2));
}
}
public class ListTest0 {
public static void main(String[] args){
List books = new ArrayList();
books.add(new String("轻量级java EE 企业应用开发"));
books.add(new String("疯狂 java讲义"));
books.add(new String("疯狂Android讲义"));
books.add(new String("疯狂ios讲义"));
//使用目标类型为Comparator的Lambda表达式来对List集合排序
books.sort((o1,o2) -> ((String)o1).length() - ((String)o2).length());
//输出:[疯狂ios讲义, 疯狂 java讲义, 疯狂Android讲义, 轻量级java EE 企业应用开发]
System.out.println(books);
books.replaceAll(ele -> ((String)ele).length());
//输出:[7, 9, 11, 17]
System.out.println(books);
}
}
3.ArrayList和Vector实现类
ArrayList和Vector类都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的,允许在分配的Object[]数组。ArrayList和Vector对象使用initialCapacity参数来设置数组的长度,当向Arraylist或Vector添加的元素超出数组的长度时,它们的initialCapacity会自动增加。
ArrayList和Vector提供了两个方法来重新分配Object[]数组:
void ensureCapacity(int minCapacity):将ArrayList或Vector集合的Object[]数组长度增加大于或等于minCapacity值。
void trimToSize():调整ArrayList或Vector集合的Objec[]数组长度为当前元素的个数。调用该方法可减少ArrayList或Vector集合对象占用的存储空间。
ArrayList和Vecto在用法上几乎完全相同,但由于Object[]是一个古老的集合(JDK1.0就有了),所以Vector在早些时候提供了很多方法名很长的方法,Vector中方法名很短的方法都是后来新增的。
ArrayList和Vector的显著区别是:ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。但Vector是线程安全的,无需保证集合的同步性。因为Vector是线程安全的,所以Vector的性能要比ArrayList集合的性能要低。实际上,即使需要保证List集合的线程安全,也同样不推荐使用Vector。
4.固定长度的List
有一个操纵数组的工具类Arrays,该工具类提供了asList(Object... a)方法,该方法可以将一个数组或者指定个数的对象转换为一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector的实例类,而是arrays的内部类ArrayList的实例。
Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合中的元素,不可增加,删除该集合中的元素。
public class FixedsizeList {
public static void main(String[] args){
List fixedList = Arrays.asList("疯狂java讲义", "疯狂ios讲义");
//获取fixedList的实现类
//输出:class java.util.Arrays$ArrayList
System.out.println(fixedList.getClass());
//输出:疯狂java讲义
// 疯狂ios讲义
fixedList.forEach(System.out::println);
//试图添加,删除元素会引发UnsupportedOperationException异常
//fixedList.add("疯狂Android讲义");
}
}
Java集合 之 List 集合的更多相关文章
- Java常用的几种集合, Map集合,Set集合,List集合
Java中 Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...
- Java基础加强之集合篇(模块记忆、精要分析)
千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...
- Java中如何克隆集合——ArrayList和HashSet深拷贝
编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...
- Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList
概要 本章是"JUC系列"的CopyOnWriteArrayList篇.接下来,会先对CopyOnWriteArrayList进行基本介绍,然后再说明它的原理,接着通过代码去分析, ...
- Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet
概要 本章是JUC系列中的CopyOnWriteArraySet篇.接下来,会先对CopyOnWriteArraySet进行基本介绍,然后再说明它的原理,接着通过代码去分析,最后通过示例更进一步的了解 ...
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
概要 本章是JUC系列的ConcurrentHashMap篇.内容包括:ConcurrentHashMap介绍ConcurrentHashMap原理和数据结构ConcurrentHashMap函数列表 ...
- Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括:ConcurrentSkipListMap介绍ConcurrentSki ...
- Java多线程系列--“JUC集合”06之 ConcurrentSkipListSet
概要 本章对Java.util.concurrent包中的ConcurrentSkipListSet类进行详细的介绍.内容包括:ConcurrentSkipListSet介绍ConcurrentSki ...
- Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
概要 本章对Java.util.concurrent包中的ArrayBlockingQueue类进行详细的介绍.内容包括:ArrayBlockingQueue介绍ArrayBlockingQueue原 ...
- Java多线程系列--“JUC集合”08之 LinkedBlockingQueue
概要 本章介绍JUC包中的LinkedBlockingQueue.内容包括:LinkedBlockingQueue介绍LinkedBlockingQueue原理和数据结构LinkedBlockingQ ...
随机推荐
- EventBus初理解
缘由: 平时工作,因为懒于动笔的原因,也没注重技术和经验的积累,导致之前曾经研究过的问题现在又忘记了,所以要慢慢注重积累,那么就从写作开始,谈谈对工作中碰到的问题进行整理和归纳. 我们 ...
- SystemTap知识(一)
SystemTap是一个系统的跟踪探测工具.它能让用户来跟踪和研究计算机系统在底层的实现. 安装SystemTap需要为你的系统内核安装-devel,-debuginfo,-debuginfo-com ...
- Manacher算法 - 求最长回文串的利器
求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...
- OnMeasureItem和OnDrawItem的区别和联系
我们在做程序设计时界面与功能,那个更加吸引用户的兴趣呢?这是一个很难回答的问题.拥有美丽的外观,软件就成功了一半.界面由控件.工具栏.菜单.窗体等元素组成,对他们进行美化就能得到一个美丽的界面. 目前 ...
- Apache log4net™ 手册——概述【翻译】
原文地址 本文内容 概述 框架 日志(Loggers)和追加器(Appenders) 日志层次(Logger hierarchy) 追加器(Appenders) 筛选(Filters) 布局(Layo ...
- 【JavaScript回顾】对象创建的几种模式
组合使用构造函数模式和原型模式 创建自定义类型的常见方式,就是组合使用构造函数模式与原型模式.构造函数模式用于定义实 例属性,而原型模式用于定义方法和共享的属性.结果,每个实例都会有自己的一份实例属性 ...
- 局域网电脑Sql2008 R2无法连接到localhost 解决方案
1.自己电脑加入加入了公司域的话,链接Sql Server服务器,用127.0.0.1或.或localhost登录时会提示如下错误: 2.解决措施: 打开Sql配置管理器->SqlServer网 ...
- C#中弹出文件选择窗体和判断是否下载提示窗体的源码
1.创建一个window窗体
- 与众不同 windows phone (42) - 8.0 相机和照片: 通过 PhotoCaptureDevice 捕获照片
[源码下载] 与众不同 windows phone (42) - 8.0 相机和照片: 通过 PhotoCaptureDevice 捕获照片 作者:webabcd 介绍与众不同 windows pho ...
- Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法
Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法 Some sites could ...