List
list(有序、可重复)
List接口的子类:
List及其子类的存储的特点:
堆栈
队列:
数组类型的数组集合(ArrayList):
1.查找元素快(通过索引可以快速的找到指定位置的元素;因为有下标所以查询快)
查找元素慢(因为没有下标,得通过地址一个一个找);想查找某个元素,需要通过连接的节点,依次向后查找指定元素
2.增删速度快:因为新增或者删除一个元素直接改变元素链接的下一个地址就行;
.ArrayList与LinkedList对比:
。ArrayList是数组类型的集合:查询速度快,增删速度慢,所以多用ArrayList集合存储经常需要查询的数据;多用于查询业务。
。LinkedList是链表类型的集合:增删速度快,查询速度慢,所以多用LinkedList进行存储业务
List:
:向集合末尾处,添加指定的元素
add(int index, Object e):向集合指定索引处,添加指定的元素,原有元素依次后移
remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素
:将指定索引处的元素,从集合中删除,返回值为被删除的元素
:将指定索引处的元素,替换成指定的元素,返回值为替换前的元素
:获取指定索引处的元素,并返回该元素
public static void main(String[] args) { List<String> list=new ArrayList<String>();//因为List是接口不能直接new对象需要借助多态,借助子类ArrayList进行new对象 //指定插入元素 list.add("a"); //指定位置插入元素 list.add(0,"b");//(指定位置,下标,插入的元素) list.add("c"); //遍历 for(int i=0;i<list.size();i++) {//因为List具有下标,可以用老式for进行循环取值 System.out.println(list.get(i)); } //删除指定下标的元素, String str= list.remove(2);//
LinkedList:
LinkedList是基于链表的,它是一个双向链表,每个节点维护了一个prev和next指针。同时对于这个链表,维护了first和last指针,first指向第一个元素,last指向最后一个元素。LinkedList是一个无序的链表,按照插入的先后顺序排序,不提供sort方法对内部元素排序。
Add元素:
LinkedList提供了几个添加元素的方法:addFirst、addLast、addAll、add等,时间复杂度为O(1)。
Remove元素:
LinkedList提供了几个移除元素的方法:removeFirst、removeLast、removeFirstOccurrence、remove等,时间复杂度为O(1)。
Get元素:
根据给定的下标index,判断它first节点、last直接距离,如果index<size(数组元素个数)/2,就从first开始。如果大于,就从last开始。这个和我们平常思维不太一样,也许按照我们的习惯,从first开始。这也算是一点小心的优化吧。
遍历
在类集中提供了以下四种的常见输出方式:
1)Iterator:迭代输出,是使用最多的输出方式。
2)ListIterator:是Iterator的子接口,专门用于输出List中的内容。
3)foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合。
4)for循环
代码示例如下:
for的形式:for(int i=0;i<arr.size();i++){...}
foreach的形式: for(int i:arr){...}
iterator的形式:
Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}
LinkedList:public static void main(String[] args){ LinkedList<String> arr=new LinkedList<String>(); arr,addFrist("a"); .addFrist()是把元素添加为第一个元素的意思, 但是后来调用的.addFrist()方法的元素会替代之前用的或者现有的第一个元素 arr.addFrist("b"); arr.addLast("c"); .addLast()是把元素添加为最后一个元素的意思, 但是后来调用的.addLast()方法的元素会替代之前或者现有的最后一个元素 arr.addFrist("d"); for(String s:arr){system.out.println(s)}//结果d,b,a,c
移除第一个位置的元素
out.println( arr.getFirst());//b
out.println(arr.getLast());// c
(!arr.isEmpty()){ //判断集合是否为空
system.out.println(arr.getLast());
得到最后一个元素.getLast():system.out.println(arr.getLast()); //判断集合中是否有元素:system.out.println(arr.isEmpty());结果是false,isEmpty()是判断集合是否为空是否没有值,所以是false如果没有值就返回true
来源:博客园
作者:腊月出去玩
链接:https://www.cnblogs.com/layuechuquwan/p/11437914.html