學習筆記 - collection、List、ArrayList
一、collection簡介
* |--List:元素是有序的,元素可以重複,因爲該集合體繫有索引。
* |--ArrayList:底層的數據結構使用的是數組結構。特點:查詢速度很快。但是增刪稍慢。線程不同步。可變長度數組。
* |--LinkedList:底層使用的是鏈表數據結構。特點:增刪的速度很快,查詢的速度很慢。
* |--Vector:底層使用的是數據結構;線程是同步的 ;被ArrayList替代了。1.0 。比較浪費空間
*
* |--Set:元素是無序的,元素不可以重複。 set:
* 特有方法。凡是可以操作角標的方法都是該體系特有的方法。
* 增:
* add(index,element);
* addAll(index,Collection);
* 刪:
* remove(index);
* 改:
* set(index,element);
* 查:
* get(index); subList(from,to);
*
* listIterator();
二、List使用簡介
*
* List集合特有的迭代器。ListIterator是Iterator的子接口
* 在遍歷過程中進行增刪改查
*
* 在迭代時,不可以通過集合對象的方法操作集合中的元素。
* 因爲會發生ConcurrentModificationExcepiton異常。
*
* 所以,在迭代器時,只能使用迭代器的方法操作元素,可是Iterator方法是有限的,
* 只能對元素進行判斷,取出,刪除操作。
* 如果想要其他的操作如:添加、修改等,就需要使用其子接口,ListIterator.
*
* 該接口只能通過List集合的listIterator 方法獲取。
三、List使用示例
public class ListDemo {
public static void main(String[] args) {
method_1();
method_2();
}
public static void method_2(){
//演示列表迭代器
ArrayList al = new ArrayList();
// 1.添加元素。
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
sop(al);
//能用的原因:List下面都帶有角標
ListIterator li = al.listIterator();
sop("hasNext:"+li.hasNext());
sop("hasProviros:"+li.hasPrevious());
while(li.hasNext()){
Object obj = li.next();
if(obj.equals("java2")){
// li.add("java006");
li.set("java002");
}
}
sop("hasNext:"+li.hasNext());
sop("hasProviros:"+li.hasPrevious());
sop(al);
while(li.hasPrevious()){
sop(li.previous());
}
sop(al);
//在迭代過程中,準備添加或者刪除元素
//對同一個集合同時進行添加和取出,會發生併發錯誤。
// Iterator it = al.iterator();
// while(it.hasNext()){
// sop("next:"+it.next());
//
// }
}
public static void method_1(){
ArrayList al = new ArrayList();
// 1.添加元素。
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
//在指定位置添加元素
al.add(1,"java01");
sop(al);
//刪除指定位置的元素
al.remove(2);
sop(al);
//修改元素
al.set(2, "java007");
sop(al);
//通過角標獲取元素
sop("get(1):"+al.get(1));
sop(al);
//獲取所有元素
for(int x = 0;x<al.size();x++){
System.out.println(al.get(x));
}
Iterator it = al.iterator();
while(it.hasNext()){
sop(it.next());
}
//通過IndexOf獲取對象的位置
sop("index="+al.indexOf("java007"));
List sub = al.subList(1, 3);
sop(sub);
}
public static void sop(Object obj) {
System.out.println(obj);
}
四、LinkedList簡介
* LinkedList特有方法: addFirst(); addLast();
*
* getFirst(); getLast();
*獲取元素但是不刪除元素,如果集合中沒有元素,會出現 NoSuchElementExcption
*
* removeFirst(); removeLast();
* 獲取元素但是刪除元素,如果集合中沒有元素,會出現 NoSuchElementExcption
*
*
*
* 在JDK1.6出現了替代方法。
* offerFirst();添加元素
* offerLast();
*
* peekFirst();
* peekLast();
* 獲取元素但是不刪除元素,如果集合中沒有元素,會返回Null
*
* pollFirst();
* pollLast();
* 獲取元素但是刪除元素,如果集合中沒有元素,會返回Null
五、LinkedList使用示例
public class LinkedListDemo {
public static void main(String[] args) {
method_1();
method_2();
}
public static void method_2(){
LinkedList link = new LinkedList();
// 原因:將元素一個一個的添加到了頭部
link.addFirst("java1");
link.addFirst("java2");
link.addFirst("java3");
link.addFirst("java4");
// 原因:將元素一個一個的添加到了尾部
link.addLast("java5");
//沒有這個元素異常 NoSuchElementExcption
while(!link.isEmpty()){
//刪除最後一個元素
sop(link.removeLast());
}
}
public static void method_1() {
LinkedList link = new LinkedList();
// 原因:將元素一個一個的添加到了頭部
link.addFirst("java1");
link.addFirst("java2");
link.addFirst("java3");
link.addFirst("java4");
// 原因:將元素一個一個的添加到了尾部
link.addLast("java5");
sop(link);
// 獲取第一個元素
sop(link.getFirst());
// 獲取最後一個元素
sop(link.getLast());
sop("刪除第一個元素:" + link.removeFirst());
sop(link.getFirst());
sop(link.size());
}
public static void sop(Object obj) {
System.out.println(obj);
}
}
六、ArrayList使用示例
* 將自定義對象作爲元素存到ArrayList集合中,並去除重複元素。
*
* 比如:存人對象,同姓名同年齡,看做是同一個人。爲重複元素。
*
* 思路:
* 1,對人進行描述,將數據封裝進入人對象。
* 2,定義容器,將人存入。
* 3,取出。
*
* List集合判斷元素是否相同,依據的是元素的equals方法
public static void main(String[] args) {
ArrayList a2 = new ArrayList();
//判斷元素是否相同,應該是用equals方法
a2.add(new Person(11,"小王"));
a2.add(new Person(22,"小李"));
a2.add(new Person(11,"小王"));
a2.add(new Person(33,"小票"));
a2.add(new Person(44,"小妹"));
a2 = singleArr(a2);
Iterator it = a2.iterator();
while(it.hasNext()){
//需要向下轉型
Person p = (Person) it.next();
sop(p.getName()+"......"+p.getAge());
}
sop("remove 小票:"+a2.remove(new Person(33, "小票")));
}
/**
* 定義的臨時的容器
* @param a
* @return
*/
public static ArrayList singleArr(ArrayList a){
//新建的ArrayList
ArrayList arr = new ArrayList();
//應該是傳進來的對象使用迭代器
Iterator it = a.iterator();
while(it.hasNext()){
Object obj = it.next();
if(!arr.contains(obj))
arr.add(obj);
}
return arr;
}
public static void sop(Object obj){
System.out.println(obj);
}
}
/**
* Person 類來自Object的equals方法,但是比較的是地址值
* @author Administrator
*
*/
class Person{
private int age;
private String name;
Person(int age,String name){
this.age = age;
this.name = name;
}
public boolean equals(Object obj){
if(!(obj instanceof Person))
return false;
Person p = (Person) obj;
System.out.println(this.name+"...."+p.name);
System.out.println(this.age +"..."+p.age);
return this.name.equals(p.name)&&this.age==p.age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}