黑馬程序員java學習筆記,集合

集合類
  數組只能存儲固定長度的,集合是可變的,數組只能存儲基本數據類型,集合可以存儲對象,長度是不固定的
  java.util package 中
  Collection List Set
  ArrayList LinkedList Vector HashSet TreeSet
 
  ArrayList a1=new ArrayList();
  集合中存放的不是對象實體,只是對象地址
  a1.add("kingkong");
  a1.add("Jack");
  a1.add("Rose");
  a1.add("Sam");
  Iterator it=a1.iterator();
  while(it.hasNext()){  //獲取迭代器,用於取出集合中的元素
 it.next();
  }
  或者 用for循環寫
   for(Iterator it=a1.iterator();it.hasNext();){
  it.next();
   }
  
   List 中元素是有序的,元素是可以重複的,因爲該集合有索引
  ArrayList 底層使用的是數組結構,查詢速度很快,但是增刪稍慢
  LinkedList 底層使用的是鏈表數據結構, 增刪速度很快,查詢稍慢
  Vector 底層是數組結構,線程同步,被ArrayList替代
   Set  中元素是無序的,元素是不可以重複的
-----------------------------------------------------------------------  
   List:特有方法,凡是可以操作角標的都是List的對象
   增
      add(index,element);
   addAll(index,element);
 刪
    remove(index);
 改
    set(index,element);
 查
    get(index);
    subList(from,to);
    listIterator();
 for(int x=0;x<a1.size();x++)
 
 ArrayList a1=new ArrayList();
 Iterator it=a1.iterator();
 ListIterator li=a1.ListIterator();//List所特有的迭代器
 
 while(li.hasNext()){
 Object obj=li.next();
 if(obj.equals("kingkong"))
  li.set(obj);
 }
 while(it.hasNext()){
 Object obj=it.next();
 if(obj.equals("kingkong"))
  
  //it.remove();//將kingkong刪除
 }
 List 集合的特有的迭代器,ListIterator是Iterator的子接口
  在迭代時,不可以通過集合對象方法操作集合中的元素
  因爲會發生ConCurrentModificationException異常
  所以在迭代器時,只能用迭代器的方法操作元素,可是Iterator方法是有限的
 ***********************************************************
 LinkedList 中特有的方法
    addFirst();或者offerFirst();
 addLast();或者offerLast();
    getFirst();或者peekFirst();  後面的新方法不會產生異常
 getLast();或者peekLast();
 removeFirst();或者poolFirst();
 removeLast();或者poolLast();
 LinkedList link=new LinkedList();
 link.add("kingkong");
 link.addLast("Jack");
**************************************************************************************************8
Set集合的功能和Collection功能是一樣的
  HashSet 底層結構式哈希表,線程是非同步的
    保證元素唯一性的原理,判斷hashCode值是否相同
 如果相同,還會繼續判斷元素的equals方法,是否爲true
 HashSet是通過元素的兩個方法,hashCode和equals來完成
 如果元素的兩個方法,hashCode和equals來完成
 如果元素的HashCode值相同,纔會判斷equals是否爲true
 如果元素的HashCode值不同,不會調用equals
 對於判斷元素是否存在,以及刪除等操作,依賴的方法是元素的hashCode和equals方法
  TreeSet 底層結構式二叉樹,可以對集合中的元素進行排序
 保證元素唯一性的依據:compareTo方法return 0;
 
  TreeSet排序的第一種方式,讓元素具備比較性
  元素要實現Comparable接口,覆蓋compareTo方法
 
  TreeSet的第二種排序方式
    當元素不具備比較性,或者具備的比較性不是所需要的
    這時就需要讓集合自身具備比較性
    在集合初始化時就有比較性
 
HashSet hs=new HashSet();

hs.add("kingkong");
hs.add("Jack");
hs.add("Rose");
自定義對象 必須複寫函數的equals和hashCode
hs.contains(new Person("a1",11));
hs.remove(new Person());
*****************************************************************************
  class Student implements Comparable{
  public int comparaTo(){
   if(!(obj instanceof Student))
    throw new RuntimeException("is not Student instance");
   Student s=(Student)obj;
   if(this.age>s.age)
    return 1;
   if(this.age==s.age){
    return this.name.compareTo(s.name);
   }
   return -1;
    
  }
  }
  TreeSet ts=new TreeSet();
********************************************************************************************
泛型
  用於解決安全問題,是一個安全機制
  ArrayList<String> a1=new ArrayList<String>();
 
  //迭代器也需要泛型表示
  Iterator<String> it=a1.iterator<String>();
 
  1.將運行時期的問題ClassCastException,轉移到了編譯時期
  2.避免強制轉換類型
 
  在使用java提供的對象時,什麼時候寫泛型
    在集合框架中很常見,只要見到<>就得定義泛型
 <>就是用來接收類型的
 當使用集合時,將集合中要要存儲的數據類型作爲參數傳遞到<>中
 當自定義對象,必須定義hashCode和equals方法,還得實現comparable接口,複寫其中的compareTo方法,使其具備默認比較性
 TreeSet<Sting> ts=new TreeSet<String>();
 ts.add("kingkong");
    ts.add("Jack"); 
 Iterator<String>it=new Iterator<String>();
    while(it.hasNext()){
  String s=it.next();
 }
 class LenCompatator implements Comparator<String>(){
  public int compare(String s1,String s2){
   int num=new Integer(s1.length()).compateTo(new Integer(s2.length()));
   if(num==0)
    return s2.compareTo(s1);
   return num; 
  }
 }

class Worker{
 
}
class Tool{
 private Object  obj;
 public void setWorker(Object obj){
  this.obj=obj;
 }
 public Object getWorker(){
  return obj;
 }
}
//泛型類 ,當不確定其中的引用順序不確定,可以定義泛型
class Utils<Type>{
 private Type type;
 public void setObject(Type type){
  this.type=type;
 }
 public Type getObject(){
  return type;
 }
}
/*
class Tool{
 private Worker worker;
 public void setWorker(Worker worker){
  this.worker=worker;
 }
 public Worker getWorker(){
  return worker;
 }
}
**/
靜態方法泛型
  class Demo<T>{
 public void show(T t){
  System.out.println(t);
 }
 public <E> void print(E e){
  System.out.println(e);
 }
 //靜態方法不可以訪問類上定義的泛型
   如果靜態方法的操作的應用不確定,可以將泛型定義在方法上
  
   public static <W>void method(W t){
   System.out.println(t);
   }
  }
 泛型定義在接口上
   interface Inter<T>{
  void show(T t);
   }
   class InterImpl extends Inter<String>{
  public void show(String s){
   System.out.println(s);
  }
   }
  class InterImpl<T> implements Iner<T>{
  public void show(T t){
   System.out.println(t);
  }
  }
靜態方法不可以訪問類上定義的泛型
如果靜態方法操作的應用數據類型不確定,可以將泛型定義在方法上
方法上的泛型標誌放在返回值的前面,修飾符的後面
泛型限定
? 是通配符,也可以理解爲佔位符
<? extends E>可以接受E類型或者E的子類型,上限
<? super E> 可以接受E類型或者E的父類型,下限
public static void printColl(ArrayList<? extends Person>a1){
 Iterator<? extends Person>it=a1.iterator();
}
public static void printColl(ArrayList<?> a1){
 Iterator<?> it=a1.iterator();
 while(it.hasNext()){
  System.out.println(it.next());
 }
}
***************************************************************************************************
Map集合:該集合存儲鍵值對,一對一對的存儲
  添加
 put()
 putAll()
  刪除
    clear()
 remove()
  判斷
 isEmpty()
  獲取
 get()
 size()
 values()
 keySet()
 entrySet()
HashTable:底層是哈希表數據結構,線程同步,不可以存入null鍵null值
       必須實現hashC和equals方法
   
HashMap:哈希表數據結構,允許使用null值和鍵,不同步
  必須實現hashC和equals方法和CompareTo方法
TreeMap:底層是二叉樹,線程不同步,可以用於給map集合中的鍵進行排序
 Map<String,String> map=new HashMap<String,String>();
 map.put("01","kingkong");
 map.put("02","Jack");
 添加相同的值,會覆蓋原來的值
 map.remove("02");
 map.containsKey("02");
 Map<Sting,String> map=new HashMap<Sting,string>();
 map.put("01","kingkong");
 map.put("02","Jack");
 Set<String>keySet=map.keySet();
 Iterator<String>it=keySet.iterator();
 while(it.hasNext()){
  String key=it.next();
  //有了鍵就可以通過map集合的get方法獲取其對應的value
  String value=map.get(key);
  //將Map中的映射關係取出,存入到Set集合中
  Set<Map.Entry<String,String>> entrySet=map.entrySet();
  Iterator<Map.Entry<String,String>>it=entrySet.iterator();
  while(it.hasNext()){
   Map.Entry<String,String>me=it.next();
   String key=me.getKey();
   String value=me.getValue();
  }
 }
 實現CompareTo方法
 
 
 Arrays是對數組操作的工具類
 asList:將數組變成List集合
 List<String>list=Arrays.asList(arr);
 
 增強for循環
   迭代器除了遍歷,還可以進行remove集合中元素的動作
   如果是用ListIterator,還可以再遍歷過程中對集合進行增刪改查的操作
     ArrayList<String>a1=new ArrayList<String>(); 
     a1.add("kingkong");
  a1.add("Jack");
  for(String s: a1){ //只能取出不能對集合進行操作
  System.out.println(s);
  }
  int[] arr={2,4,6};
  for(int x:arr){
  System.out.println(x);
  }
--------------------------------------------------
Properties 是hashtable的子類,具備map集合的特點,而且裏面存儲的鍵值對是字符串

是集合中和IO技術想結合的集合容器

該對象的特點:可以用於鍵值對形式的配置文件
設置和獲取元素
public static void setAndGt(){
 Properties prop=new Properties();
 
 prop.setProperty("john","10");
 prop.setProperty("jack","87");
 
 String value=prop.getProperty("jack");
 
 Set<String> names=prop.stringPropertyNames();
 
 for(String s:names){
  sop(prop.getProperty(s));
 }
}

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