1. 程式人生 > >Vector與Map

Vector與Map

Map集合

map集合的使用

package com.cloud.map;

import java.util.HashMap;

import java.util.Map;

publicclass Demo1 {

/*

雙列集合:

   Map:實現Map介面的集合類,具備的特點:儲存的資料都是以鍵值對的方式,鍵不可以重複,值可重複

*/

   publicstatic void main(String[] args) {

      Map<String,String> map = new HashMap<String,String>();

      map.put("1","aaa");

      map.put("2"

,"bbb");

      map.put("3","ccc");

      /*新增常用的方法

      //這裡返回null:表示4這個鍵以前沒有關聯的值

      System.out.println(map.put("4", "ddd"));

      //這裡輸出關聯的值ddd,會被abc覆蓋

      map.put("5", "abc");

      System.out.println(map.put("4", "abc"));

      Map<String,String> map2 = new HashMap<String,String>();

      map2.put("6", "eee

");

      map2.put("1", "aaa");

      map2.put("1", "ert");

      map.putAll(map2);

      */

      /*刪除資料常用的方法

      System.out.println("刪除的資料:"+map.remove("1"));

      map.clear();

      */

      /*獲取方法

      System.out.println(map.get("1"));

      System.out.println(map.size());

      */

      /*判斷的方法

      System.out.println(map.containsKey("1"));

      System.out.println(map.containsValue("aaa"));

      map.clear();

      map.put(null, null);

      System.out.println(map.isEmpty());

      */

      System.out.println("集合元素:"+map);

   }

}

HashMap的使用

package com.cloud.map;

import java.util.HashMap;

import java.util.Map;

publicclass Demo2 {

/*

HashMap

底層使用hash表來實現

HashMap中新增元素的時候,首先呼叫鍵的hashCode方法得到元素的雜湊碼的值,經過運算,得

到該元素在雜湊表中的位置;

   1.如果該位置沒有儲存元素,則元素之間新增到雜湊表中

   2.如果該位置有其他的元素,會呼叫元素的equals方法,如果返回false,該元素被儲存,返回

     true,該元素重複不能儲存

*/

   publicstatic void main(String[] args) {

      Map<Person,String> map = new HashMap<Person,String>();

      map.put(new Person(1,"a"),"aaa");

      map.put(new Person(2,"b"),"bbb");

      map.put(new Person(3,"c"),"ccc");

      map.put(new Person(1,"a"),"ddd");

      System.out.println("集合的元素:"+map);

   }

}

class Person{

   privateint id;

   private Stringname;

   public Person(int id,String name){

      this.id=id;

      this.name=name;

   }

   @Override

   public String toString() {

      return"[編號:"+this.id+";姓名:"+this.name+"]";

   }

   @Override

   publicint hashCode() {

      //TODO Auto-generated method stub

      returnthis.id;

   }

   @Override

   publicboolean equals(Object obj) {

      Person p=(Person) obj;

      returnthis.id==p.id;

   }

}

TreeMap的使用

package com.cloud.map;

import java.util.Comparator;

import java.util.TreeMap;

publicclass Demo3 {

/*

TreeMap:基於二叉樹的資料結構實現的,會對具備自然特性的鍵進行排序儲存

1.元素的鍵具備自然特性,直接排序儲存

2.不具備自然特性,實現Comparable介面,在ComparaTo中定義排序規則

3.不具備自然特性,沒有實現Comparable介面,在建立TreeMap物件的時候傳入比較器

 */

   publicstatic void main(String[] args) {

      //建立一個比較器

      MyComparator my=new MyComparator();

      TreeMap<Emp,String> map=new TreeMap<Emp,String>(my);

      /*map.put('c', 3);

      map.put('b', 2);

      map.put('a', 1);*/

      map.put(new Emp("a",5000),"6");

      map.put(new Emp("b",4000),"5");

      map.put(new Emp("c",3000),"4");

      map.put(new Emp("d",2000),"3");

      //下面e的值1就會覆蓋d的值3

      map.put(new Emp("e",2000),"1");

      System.out.println(map);

   }

}

class Emp/*implements Comparable<Emp>*/{

   String name;

   intsarlary;

   public Emp(String name,int sarlary){

      this.name=name;

      this.sarlary=sarlary;

   }

   @Override

   public String toString() {

      return"[姓名:"+this.name+";薪水:"+this.sarlary+"]";

   }

   /*@Override

   publicint compareTo(Emp o) {

      return this.sarlary-o.sarlary;

   }*/

}

//自定義一個比較器

class MyComparatorimplements Comparator<Emp>{

   @Override

   publicint compare(Emp o1, Emp o2) {

      return o1.sarlary-o2.sarlary;

   }

}

Vector集合

Vector類 是在 java 中可以實現自動增長的物件陣列,vector在C++標準模板庫中的部分內容,它是一個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。vector是C++標準模板庫中的部分內容,中文偶爾譯作“容器”,但並不準確。它是一個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。vector之所以被認為是一個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說,vector是一個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。簡單的使用方法如下:
123vector<int>test;//建立一個vectortest.push_back(1);test.push_back(2);//把1和2壓入vector這樣test[0]就是1,test[1]就是2
我們可以用一個迭代器:vector<int>::iterator iter=test.begin();//定義一個可以迭代int型vector的迭代器iter,它指向test的首位for(;iter!=test.end();iter++) cout<<(*iter);//iter++指的是向後迭代一位,直到iter到超出末端迭代器為止,輸出迭代器指向的值我們也可以使用at訪問:
1234vector<int>test;//建立一個vectortest.push_back(1);test.push_back(2);//把1和2壓入vector這樣test[0]就是1,test[1]就是2int i =test.at(1);//i為2
JAVA中Java.util.Vector提供了向量(Vector)類以實現類似動態陣列的功能。在Java語言中是沒有指標概念的,但如果能正確靈活地使用指標又確實可以大大提高程式的質量,比如在C、C++中所謂“動態陣列”一般都由指標來實現。為了彌補這點缺陷,Java提供了豐富的類庫來方便程式設計者使用,Vector類便是其中之一。事實上,靈活使用陣列也可完成向量類的功能,向量類中提供的大量方法也大大方便了使用者的使用。在相對於ArrayList來說,Vector執行緒是安全的,也就是說是同步的建立了一個向量類的物件後,可以往其中隨意地插入不同的類的物件,既不需顧及型別也不需預先選定向量的容量,並可方便地進行查詢。對於預先不知或不願預先定義陣列大小,並需頻繁進行查詢、插入和刪除工作的情況,可以考慮使用向量類。向量類提供了三種構造方法
123public Vector()public Vector(int initialcapacity,int capacityIncrement)public Vector(int initialcapacity)
使用第一種方法,系統會自動對向量物件進行管理。若使用後兩種方法,則系統將根據引數initialcapacity設定向量物件的容量(即向量物件可儲存資料的大小),當真正存放的資料個數超過容量時,系統會擴充向量物件的儲存容量。引數capacityIncrement給定了每次擴充的擴充值。當capacityIncrement為0時,則每次擴充一倍。利用這個功能可以優化儲存。在Vector類中提供了各種方法方便使用者使用:

package com.cloud.vector;

import java.util.Enumeration;

import java.util.Vector;

publicclass Day1 {

   /*

   Vector底部維護Object陣列,實現和ArrayList一樣,但是Vector是執行緒安全,效率低,二者比較:

相同點:

      1.底部都是維護Object的陣列

不同點:

      1.ArrayList執行緒不同步,效率高

      2.ArrayList JDK1.2出現,Vector JDK1.0出現

   */

   publicstatic void main(String[] args) {

      Vector v=new Vector();

      v.addElement("Spring1");

      v.addElement("Spring2");

      v.addElement("Spring3");

      Enumeration e = v.elements();

      while(e.hasMoreElements()){

        System.out.println(e.nextElement());

      }

   }

}