java基礎---類集框架一


 

學習筆記 - 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;
 }
 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章