第十四課 集合框架

1.簡介

集合框架(Collections Framework ) (容器類)

    java.util包下


以下是java1.2版本之後提供的類和接口
Collection(接口)

      ---List(接口):有序可重複
           
           ----ArrayList(實現類):實現了 大小可變的數組

           ----LinkedList(實現類):鏈接列表實現除了實現 ,List 接口外,LinkedList   

                                 類還爲在列表的開頭及結尾 提供了統一的命名方法

      ---Set(接口):無序不重複

           ----HashSet(實現類):由哈希表支持  不重複

                 Object類的 hashCode():它將會給每一個對象產生一個int的數據作爲散列 

                                       碼。一般理想狀態就是不同的對象散列碼是不同的
                 判斷兩個對像是同一對象:
                          有個叫哈希桶 是來存放對象的地方 當我們把一個對象放入其中
                          時先會比較桶裏的每一個對象的hashCode值是否與放入的對象相
                          等如果相等就進一步去比較兩個對象的equals方法返回的值是否
                          爲ture 如果爲true 兩個對象就是同一個對象。
                           所以對像在覆蓋equals 方法和hashCode方法時標準要保持一致
                          (選一個能唯一代表整個對象的屬性)

          ---LinkedHashSet(實現類):具有可預知迭代順序(添加的順序)的 Set 接口的哈希
                                   表和鏈接列表實 現

          ---TreeSet(實現類):使用元素的自然順序對元素進行排序(升序)                

            
Iterator(接口):迭代器

    兩個重要方法:hasNext  next

Map(接口):將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射到一個值。
 
     ----HashMap(實現類) 基於哈希表的 Map 接口的實現  按key無序

     ----LinkedHashMap(實現類):按照key是有序的

     ----TreeMap(實現類):按照key是升序的

jdk1.2以前的類
 
    ArrayList 和 Vector的區別

       1.當默認的初始化容量慢的情況下  ArrayList增加原來的一半
          Vector是增加原來的一倍
       2.ArrayList 是非線程安全  Vector是線程安全  ArrayList效率高一點

    HashMap和 HashTable的區別

       1.HashMap允許null的key存在 HashTable不允許

       2.HashMap是非線程安全的  HashTable是線程安全  HashMap效率高一點


    Properties:key value映射    key和value一般情況是Stirng

 

2.例子

     以下幾個例子都會用到Person 所以首先給出

public class Person {
 private long id;
 private String name;
 public long getId() {
  return id;
 }
 public void setId(long id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 @Override
 public int hashCode() {
  final int PRIME = 31;
  int result = 1;
  //hashCode 生成的一個算法 提高效率
  result = PRIME * result + (int) (id ^ (id >>> 32));
  return result;
 }
 @Override
 public boolean equals(Object obj) {
  if (this == obj)//比較地址相等 兩個對象一定是同一個
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())//兩個對象是否使用同一個類加載器
   return false;
  
  final Person other = (Person) obj;
  if (id != other.id)//我們自己選擇的比較原則
   return false; 
  return true;
 }
}

 

1)ArrayList的例子

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestPersonArrayList {
 public static void main(String[] str){
  Person person=new Person();
  person.setId(1001);
  person.setName("yuiop");
  
  List<Person> list= new ArrayList<Person>();
  list.add(person);
      //循環迭代方式(一) 
  for(Person p:list){
   System.out.println(p.getName()+":"+p.getId());
  }
   //循環迭代方式(二)
  for(int i=0;i<list.size();i++){
   Person p=(Person)list.get(i);
   System.out.println(p.getName()+":"+p.getId());
  }
   //循環迭代方式(三)
  Iterator it=list.iterator();
  while(it.hasNext()){
   Person p=(Person)it.next();
   System.out.println(p.getName()+":"+p.getId());
  }  
 }
}

2)HashSet的例子

import java.util.HashSet;
import java.util.Set;
public class TestPersonHashSet {
 public static void main(String[] args) {  
  Person person=new Person();
  person.setId(1001);
  person.setName("yuiop");
    
  Person person1=new Person();
  person1.setId(1001);
  person1.setName("yuiop");
  
  Set<Person> set= new HashSet<Person>();
  set.add(person);
  boolean flag=set.add(person1);  
  System.out.println(flag);//false
  
  for(Person p:set){
   System.out.println(p.getName()+":"+p.getId());
  }  
 }
}

3)HashMap的例子

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestPersonHashMap {
 public static void main(String[] args) {
  Map<Long, Person> map = new HashMap<Long, Person>();
  Person p = new Person();
  p.setId(1001);
  p.setName("jessica");  
  Person p1 = new Person();
  p1.setId(1002);
  p1.setName("jessica");

  map.put(p.getId(), p);
  map.put(p1.getId(), p1);
  
  Set<Long> setKey = map.keySet();// 取到map集合裏所有的key值

  for (Long key : setKey) {
   Person person = map.get(key);// 根據key取Value
   System.out.println("key:" + key + "  value:" + person.getName());
  }
  System.out.println("-------------------------------------");
  
  map.remove(new Long(1001));//根據key可以進行移除
  
  System.out.println(map.size());
  
  Set<Long> setKey1 = map.keySet();// 取到map集合裏所有的key值
  for (Long key : setKey1) {
   Person person = map.get(key);// 根據key取Value
   System.out.println("key:" + key + "  value:" + person.getName());
  }
 }
}

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