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 集合的更多相关文章

  1. Java常用的几种集合, Map集合,Set集合,List集合

    Java中  Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...

  2. Java基础加强之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  3. Java中如何克隆集合——ArrayList和HashSet深拷贝

    编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...

  4. Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList

    概要 本章是"JUC系列"的CopyOnWriteArrayList篇.接下来,会先对CopyOnWriteArrayList进行基本介绍,然后再说明它的原理,接着通过代码去分析, ...

  5. Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet

    概要 本章是JUC系列中的CopyOnWriteArraySet篇.接下来,会先对CopyOnWriteArraySet进行基本介绍,然后再说明它的原理,接着通过代码去分析,最后通过示例更进一步的了解 ...

  6. Java多线程系列--“JUC集合”04之 ConcurrentHashMap

    概要 本章是JUC系列的ConcurrentHashMap篇.内容包括:ConcurrentHashMap介绍ConcurrentHashMap原理和数据结构ConcurrentHashMap函数列表 ...

  7. Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap

    概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括:ConcurrentSkipListMap介绍ConcurrentSki ...

  8. Java多线程系列--“JUC集合”06之 ConcurrentSkipListSet

    概要 本章对Java.util.concurrent包中的ConcurrentSkipListSet类进行详细的介绍.内容包括:ConcurrentSkipListSet介绍ConcurrentSki ...

  9. Java多线程系列--“JUC集合”07之 ArrayBlockingQueue

    概要 本章对Java.util.concurrent包中的ArrayBlockingQueue类进行详细的介绍.内容包括:ArrayBlockingQueue介绍ArrayBlockingQueue原 ...

  10. Java多线程系列--“JUC集合”08之 LinkedBlockingQueue

    概要 本章介绍JUC包中的LinkedBlockingQueue.内容包括:LinkedBlockingQueue介绍LinkedBlockingQueue原理和数据结构LinkedBlockingQ ...

随机推荐

  1. 使用Html5+C#+微信 开发移动端游戏详细教程 :(一)序(关于作者创业失败的感想)

    说起梦想,我清楚的记得2012年7月初毕业,拿到毕业证书的那天果断买好了次日南下去深圳的绿皮火车票,500多块,26个小时车程.第二天就拖上行李到了深圳. 一开始的想法仅仅是过去想见见世面,学习点新技 ...

  2. HMM 自学教程(三)隐藏模式

    本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...

  3. djngo快速实现--使用Bootstrap

    继续django学习之旅,之前我们所做的Django练习前端都非常丑.这节我们使用Bootstrap,顿时使丑陋的页面变成白天鹅. 安装Bootstrap                        ...

  4. Direct2D开发:纹理混合

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 我们都知道Direct2D可以加载并显示图片,但是不知道你有没有想过,这个2D的图形引擎可以进行纹理混合吗?如果 ...

  5. SQL Server里的INTERSECT ALL

    在上一篇文章里,我讨论了INTERSECT设置操作的基础,它和INNER JOIN的区别,还有为什么需要好的索引设计支持.今天我想谈下SQL Server里并未实现的INTERSECT ALL操作. ...

  6. Redis设计与实现-附加功能

    发布与订阅 redis订阅分为精准的频道订阅与模糊匹配的模式订阅: redis将所有频道的订阅关系都保存在服务器状态pubsub_channels字典里,键是频道名,值是一个记录所有订阅此频道的客户端 ...

  7. CART(分类回归树)原理和实现

    前面我们了解了决策树和adaboost的决策树墩的原理和实现,在adaboost我们看到,用简单的决策树墩的效果也很不错,但是对于更多特征的样本来说,可能需要很多数量的决策树墩 或许我们可以考虑使用更 ...

  8. mysql 线上not in查询中的一个坑

    今天早上开发又过来说,怎么有个语句一直没有查询出结果,数据是有的呀,并发来了如下的sql(为了方法说明,表名及查询均做了修改): select * from t2 where t2.course no ...

  9. [JS] jQuery选择器

    jQuery 选择器 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id=lastname 的元素 .class $(& ...

  10. 1117 新冲刺 day1

    项目需求确定 现阶段我们进行的项目是到店点餐系统.主要是开发手机端app为用户提供方便快捷的点餐服务.免去顾客到店后遇到因吃饭的人太多而找不到服务人员点餐的窘境.减少了服务人员因为忙碌而导致下单慢的问 ...