Java List集合
List本身是Collection接口的子接口,具备了Collection的所有方法。ListIterator是List集合特有的迭代器。ListIterator it = list.listIterator;//取代Iterator it = list.iterator;
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
|--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
|--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。
可变长度数组的原理:
当元素超出数组长度,会产生一个新数组,将原数组的数据复制到新数组中,再将新的元素添加到新数组中。
ArrayList:是按照原数组的50%延长。构造一个初始容量为 10 的空列表。
Vector:是按照原数组的100%延长。
注意:对于list集合,底层判断元素是否相同,其实用的是元素自身的equals方法完成的。所以建议元素都要复写equals方法,建立元素对象自己的比较相同的条件依据。
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; }*/ }