List自己是Collection接口的子接口,具有了Collection的全部方法。ListIterator是List集合特有的迭代器。ListIterator it = list.listIterator;//取代Iterator it = list.iterator;java
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素能够重复。数组
|--ArrayList:底层的数据结构是数组,线程不一样步,ArrayList替代了Vector,查询元素的速度很是快。数据结构
|--LinkedList:底层的数据结构是链表,线程不一样步,增删元素的速度很是快。ide
|--Vector:底层的数据结构就是数组,线程同步的,Vector不管查询和增删都巨慢。this
可变长度数组的原理:spa
当元素超出数组长度,会产生一个新数组,将原数组的数据复制到新数组中,再将新的元素添加到新数组中。线程
ArrayList:是按照原数组的50%延长。构造一个初始容量为 10 的空列表。code
Vector:是按照原数组的100%延长。对象
注意:对于list集合,底层判断元素是否相同,其实用的是元素自身的equals方法完成的。因此建议元素都要复写equals方法,创建元素对象本身的比较相同的条件依据。blog
1,ArrayList遍历:
import java.util.*;
public classTest{ public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("Hello"); list.add("World"); list.add("HAHAHAHA"); //第一种遍历方法使用foreach遍历List for (String str : list) { //也能够改写for(int i=0;i<list.size();i++)这种形式 System.out.println(str); } //第二种遍历,把链表变为数组相关的内容进行遍历 String[] strArray=new String[list.size()]; list.toArray(strArray); for(int i=0;i<strArray.length;i++) //这里也能够改写为 foreach(String str:strArray)这种形式 { System.out.println(strArray[i]); } //第三种遍历 使用迭代器进行相关遍历 Iterator<String> ite=list.iterator(); while(ite.hasNext())//判断下一个元素以后有值 { System.out.println(ite.next()); } } }
2,ArrayList去除集合中字符串的重复值
package com.hpioneer.collection;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @Description:
* @Author: HPioneer
* @CreateTime: 2018/5/7 19:03
* @File: Demo_ArrayLits of JavaProject in com.hpioneer.collection
* @FullFileName: com.hpioneer.collection.Demo_ArrayLits
* @Create By IntelliJ
* @Version: 1.0
*/
public class Demo_ArrayList { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("a"); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("c"); list.add("c"); list.add("c"); ArrayList newList = getSingle(list); System.out.println(newList); } public static ArrayList getSingle(ArrayList list) { ArrayList newList = new ArrayList<>(); //1,建立新集合 Iterator it = list.iterator(); //2,根据传入的集合(老集合)获取迭代器 while(it.hasNext()) { //3,遍历老集合 Object obj = it.next(); //记录住每个元素 if(!newList.contains(obj)) { //若是新集合中不包含老集合中的元素 newList.add(obj); //将该元素添加 } } return newList; } }
3,LinkedList模拟栈
package com.hpioneer.collection; import java.util.LinkedList; import java.util.Stack; /** * @Description: * @Author: HPioneer * @CreateTime: 2018/5/8 21:14 * @File: Demo_LinkedList of JavaProject in com.hpioneer.collection * @FullFileName: com.hpioneer.collection.Demo_LinkedList * @Create By IntelliJ * @Version: 1.0 */ public class Demo_LinkedList { public static void main(String[] args) { LinkedList list = new LinkedList(); list.addFirst("a"); list.addFirst("b"); list.addFirst("c"); list.addFirst("d"); list.addLast("e"); System.out.println(list.get(0)); System.out.println(list); while (!list.isEmpty()){ System.out.println(list.removeLast()); } } }
4,ArrayList嵌套ArrayList
package com.hpioneer.collection; import java.util.ArrayList; /** * @Description: * @Author: HPioneer * @CreateTime: 2018/5/8 21:24 * @File: Demo_ArrayLists of JavaProject in com.hpioneer.collection * @FullFileName: com.hpioneer.collection.Demo_ArrayLists * @Create By IntelliJ * @Version: 1.0 */ public class Demo_ArrayLists { public static void main(String[] args) { ArrayList<ArrayList<Person>> list = new ArrayList<>(); ArrayList<Person> first = new ArrayList<>(); //建立第一个班级 first.add(new Person("杨幂", 30)); first.add(new Person("李冰冰", 33)); first.add(new Person("范冰冰", 20)); ArrayList<Person> second = new ArrayList<>(); second.add(new Person("黄晓明", 31)); second.add(new Person("赵薇", 33)); second.add(new Person("陈坤", 32)); //将班级添加到学科集合中 list.add(first); list.add(second); System.out.println(first); System.out.println(second); //遍历学科集合 for(ArrayList<Person> a : list) { for(Person p : a) { System.out.println(p); } } } }
引用的Person类为:
package com.hpioneer.collection; /** * @Description: * @Author: HPioneer * @CreateTime: 2018/5/8 21:25 * @File: Person of JavaProject in com.hpioneer.collection * @FullFileName: com.hpioneer.collection.Person * @Create By IntelliJ * @Version: 1.0 */ public class Person { private String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } /*@Override public boolean equals(Object obj) { Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age; }*/ }