linkin大话数据结构--List
来源:互联网 发布:淘宝客url转换 编辑:程序博客网 时间:2024/04/30 19:20
- List:Collection子接口
List作为Collection子接口当然拥有其所有方法,同时也有自己的方法:与Set相比,List增加了根据索引来插入,替换,删除集合的所有方法。
void add(int index,Object e):将元素e添加到List集合中的index处;
boolean addAll(int index,Collection c):将集合c所包含的所有元素都插入在List集合的index处;
Object get(int index):返回集合index索引处的元素;
int indexOf(Object o):返回对象o在List集合中第一次出现位置的索引;
int lastIndexOf(object o):返回对象o在List集合中最后一次出现的位置索引;
Object remove(int index):删除并返回index索引处的元素;
Object set(int index,Object e):把集合index处的元素替换为e对象,返回以前在指定位置的元素;
List subList(int fromIndex,int toIndex):返回从所有fromIndex(包括)到toIndex(不包括)处所有集合元素的子集合。
- ListIterator
List 额外提供了一个 listIterator() 方法,该方法返回一个 ListIterator 对象, ListIterator 接口继承了 Iterator 接口,在Iterator上额外增加的方法:支持双向输出:
boolean hasPrevious():返回该迭代器关联集合是否还有上一个元素;
Object previous():返回该迭代器的上一个元素;
void add():在指定位置插入一个元素。
import java.util.ArrayList;import java.util.List;import java.util.ListIterator;/** * * @version 1L * @author LinkinPark * @since 2014-11-10 * @motto 梦似烟花心似水,同学少年不言情 * @desc ^ListIterator增加了前向迭代的功能 */public class Linkin { public static void main(String[] args) { List<String> names = new ArrayList<String>(); String[] namess = {"LinkinPark...","Binger..."}; for (String string : namess) { names.add(string); } ListIterator<String> lit = names.listIterator(); while(lit.hasNext()) { System.out.println(lit.next()); lit.add("============"); } System.out.println("开始向前迭代。。。"); while(lit.hasPrevious()) { System.out.println(lit.previous()); } } }
- List接口中常用类
ArrayList:线程不安全,查询速度快。
LinkedList:链表结构,增删速度快。取出List集合中元素的方式:
ArrayList和Vector类都是基于数组实现的List类,Vector比较古老,被ArrayList取代了;
ArrayList是线程不安全的,而Vector是线程安全的,但是即使这样,也不推荐使用Vector,因为Collections有方法可以得到线程安全的ArrayList对象;
Collections类: static List synchronizedList(List list) 返回指定列表支持的同步(线程安全的)列表。
- ArrayList 和 Vector
区别:
1,Vector 是一个古老的集合,通常建议使用 ArrayList
2,ArrayList 是线程不安全的,而 Vector 是线程安全的。
3,即使为保证 List 集合线程安全,也不推荐使用 Vector。
注意了:Arrays.asList(…) 方法返回的 List 集合即不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合。
总结:List 接口的实现类 Vector 与ArrayList 相似,区别是Vector 是重量级组件,消耗的资源较多。 在考虑并发的情况下用Vector(保证线程的安全)。 在不考虑并发的情况下用ArrayList(不能保证线 程的安全)。
- ArrayList和LinkedList集合
2、而在LinkedList 的底层是一种双向循环链表。 在此链表上每一个数据节点都由三部分组成: 前指针(指向前面的节点的位置)、 数据、 后指针(指向后面的节点的位置)。 最后一个节点的后 指针指向第一个节点的前指针,形成一个循环。
3、双向循环链表的查询效率低但是增删效率高。所以LinkedList 具有查询效率低但增删效率高的特点。
4、ArrayList 和LinkedList 在用法上没有区别,但是在功能上还是有区别的。 LinkedList 经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。
队列:先进先出的数据结构。 堆栈:后进先出的数据结构。 (堆栈就是一种只有增删没有查询的数据结构)
注意:使用堆栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。
注意:LinkedList 提供以下方法:(ArrayList 无此类方法) addFirst(); +removeFirst(); +addLast(); +removeLast(); 在堆栈中,push 为入栈操作,pop 为出栈操作。
Push 用addFirst();pop 用removeFirst(),实现后进先出。 用isEmpty()--其父类的方法,来判断栈是否为空。 在队列中,put 为入队列操作,get 为出队列操作。
Put 用addFirst(),get 用removeLast()实现队列。
Stack 类以后不要轻易使用。实现堆栈一定要用LinkedList。 (在JAVA1.5 中,collection 有queue 来实现队列。)
总结:如果需要遍历List集合元素,使用ArrayList 用随机访问get方法效率高,使用LinkedList采用迭代器;如果经常执行插入,删除操作来改变List集合大小,使用LinkedList。
固定长度的List
操作数组的工具类:Arrays。这个工具类中提供了一个asList方法,该方法可以把一个数组或指定个数的对象转换成一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector的实例,而是ArrayList的实例。Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里面的元素,不可增加,删除该集合里面的元素。
import java.util.Arrays;import java.util.List;import java.util.ListIterator;public class Linkin { public static void main(String[] args) { String[] namess = {"LinkinPark...","Binger..."}; List<String> names = Arrays.asList(namess); System.out.println(names.getClass()); //class java.util.Arrays$ArrayList ListIterator<String> lit = names.listIterator(); while(lit.hasNext()) { System.out.println(lit.next()); //lit.add("============");java.lang.UnsupportedOperationException } }}
- linkin大话数据结构--List
- linkin大话数据结构--Set
- linkin大话数据结构--Queue
- linkin大话数据结构--Map
- linkin大话数据结构--泛型
- linkin大话数据结构--字符串,数组,list之间的互转
- linkin大话数据结构--Collections类
- linkin大话数据结构--Collection和Iterator
- linkin大话数据结构--apache commons工具类
- linkin大话数据结构--Google commons工具类
- linkin大话java
- linkin大话设计模式--单例模式
- linkin大话设计模式--简单工厂
- linkin大话设计模式--抽象工厂
- linkin大话设计模式--代理模式
- linkin大话设计模式--命令模式
- linkin大话设计模式--策略模式
- linkin大话设计模式--门面模式
- UINavigationController多视图控制器
- 《严蔚敏数据结构_08》
- PHP文件操作(三)PHP实现文件上传和下载
- eclipse配置PyDev插件
- HDU 1733 Escape(分层网络流)
- linkin大话数据结构--List
- eclipse 缓存
- ActivityGroup里面装的子Activity不执行OnActivityResult()的解决办法
- 吃苹果等于刷牙 美媒公布6个养生秘方
- 绝妙的取样(《编程珠玑(续)》第十三章)
- sk_buff结构分析
- 中国移动-北京移动2015年校招面试
- 鸡兔同笼
- word 2007如何插入参考文献引用