1. 程式人生 > >java學習--集合(第二天)

java學習--集合(第二天)

宣告:由於學習所用環境為JDk1.8,所有涉及java的程式碼均在JDK1.8環境中測試通過,如果環境不同,可能會有錯誤發生!

一、Comparator介面

使用Comparable介面定義排序順序有侷限性:實現此介面的類只能按compareTo()定義的這一種方式排序。
如果同一類物件要有多種排序方式,應該為該類定義不同的比較器(實現Comparator介面的類)TreeSet有一個構造方法允許給定比較器,它就會根據給定的比較器對元素進行排序.

public class RuleScore implements Comparator<Student> {

	@Override
	public int compare(Student s1, Student s2) {
	   if(s1.getScore()>s2.getScore()){
		   return -1;
	   }else if(s1.getScore()<s2.getScore()){
		   return 1;
	   }else{
		   if(s1.getAge()>s2.getAge()){
			   return -1;
		   }else if(s1.getAge()<s2.getAge()){
			   return 1;
		   }else{
			   return s1.getName().compareTo(s2.getName());
		   }
	   }
			   
	   }
public class RuleAge implements Comparator<Student>{

	@Override
	public int compare(Student s1, Student s2) {
		if(s1.getAge()>s2.getAge()){
			return -1;
		}else if(s1.getAge()<s2.getAge()){
			return 1;
		}else{
			if(s1.getScore()>s2.getScore()){
				return -1;
			}else if(s1.getScore()<s2.getScore()){
				return 1;
			}else{
				return s1.getName().compareTo(s2.getName());
			}
		}
	}
如上所示,可以為Student類定義兩個不同的比較器(兩個實現Comparator介面的類)
二、Map集合

1、特點:
實現Map介面的集合類用來儲存“鍵-值”對映對。
不能包含重複的鍵,每個鍵最多隻能對映到一個值,值可以重複。
JDK API中Map介面的實現類常用的有:
HashMap
TreeMap
Hashtable (不常用)
Properties

2、Map介面中的常用方法Object  put(Object key, Object value); //將指定的“鍵-值”對存入Map中
Object  get(Object key);  //返回指定鍵所對映的值
Object  remove(Object key); //根據指定的鍵把此“鍵-值”對從Map中移除。
boolean  containsKey(Object key);   //判斷此Map是否包含指定鍵的“鍵-值”對。
boolean  containsValue(Object value);     //判斷此Map是否包含指定值的“鍵-值”對。
boolean  isEmpty();  //判斷此Map中是否有元素。
int  size();   //獲得些Map中“鍵-值”對的數量。
void  clear();   //清空Map中的所有“鍵-值”對。
Set  keySet();    //返回此Map中包含的鍵的Set集。
Collection values();   //返回此Map中包含的值的Collection集。
Set<Map.Entry<K,V>> entrySet() 將所有包含鍵-值對的Map.Entry收集到Set

package map;

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

public class HashMapDemo {

	public static void main(String[] args) {
	  HashMap<String, String> hm=new HashMap<>();
      hm.put("number", "123");
      hm.put("李敏", "13567");
      hm.put("city", "廈門");
      System.out.println("新增的鍵值對數目是:"+hm.size());
      System.out.println("李敏的學號是:"+hm.get("李敏"));
      hm.remove("city");
      System.out.println("現在的鍵值對數目是:"+hm.size()); 
      //遍歷所有的key
      Set<String> keys=hm.keySet();
      for(String key:keys){
    	  System.out.println("所有的key是:"+key);
      }
      //遍歷所有的value
      Collection<String> values=hm.values();
      for(String value:values){
    	  System.out.println("所有的value是:"+value);
      }
      //遍歷map集合
      Set<Map.Entry<String, String>> entrySet=hm.entrySet();
      for(Map.Entry<String, String> mapentry:entrySet){
    	  //System.out.println(mapentry.getKey()+mapentry.getValue());
    	  System.out.println(mapentry);
      }
	}

}
3、Map.Entry介面

Map.Entry是Map中內部定義的一個介面,專門用來儲存key—>value的內容。

由圖可知,Map中儲存的是Map.Entry,而Map.Entry中儲存的是key—>value鍵值對
4、HashMap類與TreeMap類

(1) HashMap儲存結構使用雜湊表,使用“鍵”進行雜湊存放。所以根據“鍵”去取“值”的效率很高。
TreeMap中的“key-value”對的“key”必須是可“排序”的。
(2) HashTable類
舊版的Hashtable,操作大多跟HashMap相同,只是它保證執行緒的同步。
它有一個子類Properties(屬性集)比較常用:
Properties 類表示了一個持久的屬性集。Properties 可儲存在流中或從流中載入。屬性集中每個鍵及其對應值都是一個字串。
不建議使用 put 和 putAll 這類存放元素方法,應該使用 setProperty(String key, String value)方法,因為存放的“鍵-值”對都是字串。類似取值也應該使用getProperty(String key)。

package map;

import java.util.Properties;

public class PropertiesDemo {

	public static void main(String[] args) {
	  Properties pro=new Properties();
	  pro.setProperty("country", "China");
	  pro.setProperty("city", "Xian");
	  pro.setProperty("province", "Shanxi");
	  System.out.println(pro.getProperty("country"));
	  System.out.println(pro.getProperty("abc", "這是預設值"));
	}

}

(2)HashMap和Hashtable區別
a. HashMap不同步,Hashtable同步
b. HashMap可以儲存null鍵null值,Hashtable不可以
c. HashMap多執行緒操作環境下效率高,Hashtable多執行緒操作環境下效率低




相關推薦

java學習--集合第二

宣告:由於學習所用環境為JDk1.8,所有涉及java的程式碼均在JDK1.8環境中測試通過,如果環境不同,可能會有錯誤發生! 一、Comparator介面 使用Comparable介面定義排序順序有侷限性:實現此介面的類只能按compareTo()定義的這一種方式排序。如

Linux學習入門第二--------基本的系統命令

安裝的映象版本是ubuntu 14.04! 1.sudo apt-get  命令 例如:sudo  apt-get  install   sl     //安裝一個名為sl的小程式   終

spring boot 學習筆記第二spring boot整合mybatis

1.spring boot整合mybatis 1.在pom檔案中新增mybatis依賴(如果在建立專案時已經勾選了mybatis選項,就不用新增mybatis-spring-boot-starter了) <dependency> <groupId>

java-web學習筆記第二

直接 () destroy 垃圾回收 垃圾回收器 troy 鏈接 ems cse 第二章:Servlet基礎 1,創建Servlet有幾種方式?處理http請求最好使用哪種方式?  1>直接實現Servlet接口和它的所有方法;&emsp

【自學筆記】0基礎自學機器學習 第二

    定義:機器學習是人工智慧的一個分支領域,主要關於構造和研究可以從資料中學習的系統。                小不忍則亂大謀,不可急功近利,工欲善其事,必先利其器,得能吃苦。 &

浙大《java語言》學習筆記第二

2.1物件互動  Display.java package clock; public class Display { private int value = 0; private int limit = 0; public Display(int limit)

HIDL學習筆記之HIDL C++第二

快速訊息佇列 (FMQ) HIDL 的遠端過程呼叫 (RPC) 基礎架構使用 Binder 機制,這意味著呼叫涉及開銷、需要核心操作,並且可以觸發排程程式操作。 不過,對於必須在開銷較小且無核心參與的程序之間傳輸資料的情況,則使用快速訊息佇列 (FMQ) 系統。

java學習日記1-7

har span 編譯失敗 數組長度 int() 冒泡排序 string length 類型 java 中標識符可以為$符, 默認是int類型超出int型必須標明是long型char 為 2字節String 是引用類型 byte b = 1;b = b + 1; #會報錯

vue的一些坑第二

作用 小童 過濾 文本 click rip col 官方 小數點 首先啊感謝一位小童鞋的指出其實我寫的這些內容算不上坑,只是平時使用的時候的一點小問題,不過只是個名字啦!再次致謝 1:兩個簡寫的命令 v-bind:class可以簡寫為 :class v-on:click可

Java學習筆記十五:import關鍵字

http 技術分享 import logs java學習筆記 .cn 關鍵字 blog ava Java學習筆記(十五):import關鍵字

Java學習筆記十五:this關鍵字

bsp java image nbsp his this mage 學習筆記 筆記 Java學習筆記(十五):this關鍵字

Java學習筆記十六:static關鍵字

ima 關鍵字 static關鍵字 es2017 java學習筆記 sta com 筆記 nbsp Java學習筆記(十六):static關鍵字

Java學習筆記十七:super關鍵字

mage cnblogs 分享 關鍵字 super關鍵字 log .cn nbsp java Java學習筆記(十七):super關鍵字

Java學習筆記二十三:final關鍵字

類繼承 ron 滿足 單詞 靜態 bsp 條件 str 進行 final關鍵字有三種使用場景: final修飾類 final修飾方法 final修飾變量 final修飾的類,不能再有子類繼承。 只要滿足以下條件就可以把一個類設計為final類: 不是專門為繼承而設

Java學習總結十四——java反射機制,利用反射動態創建對象

Java反射 動態創建對象 一.Java反射機制1.什麽是反射:反射就是把Java類中的各種成份影射成一個個的Java對象。例:一個類有:成員變量,方法,構造方法等,包等等信息,利用反射技術可以對一個類進行剖析,把各個組成部分影射成一個個對象。2.Java反射常用類:(1)Class類—可獲取類和類的

Java學習總結十五——MySQL數據庫—增,刪,改與部分查詢語句

MySQL數據庫 增 刪 改 查 一.MySQL簡介及在DOS下操作MySQL1.MySQL是一種中型關系型數據庫管理系統(DBMS,Database Management System)。註意:關系型數據庫是按照表的方式存儲數據的2.DOS環境下操作MySQL(1)進入MySQL環境:(

Spring框架第二

boolean 反射 rman pro actor . jdk 文件 開源框架 優勢 一、 註入 a) set   i. JDK     1.八種基本類型(+包裝類)+String        <bean id="User" class="com.dsl.tes

20165228 結對學習 四則運算第二

計劃 目前 BE 保留 成功 不能 porting 規範 程序 20165228 結對學習 四則運算 本次紅色為優化和添加部分 一、需求分析 題目生成 可獨立使用 考慮可擴展支持配置生成不同難度的題目,比如通過參數指定: 題目合法性判斷 測試生成題目的正確性 輸入的合法性

Django學習第二

adding 學習 AD odi 時也 hello ret order pytho 執行字符串表示的函數,並為該函數提供全局變量 本篇的內容從題目中就可以看出來,就是為之後剖析tornado模板做準備, #!usr/bin/env pyth

Java學習總結十六——MySQL數據庫分組,嵌套,連接查詢及外鍵與關系表設計

MySQL數據庫 分組查詢 連接查詢 子查詢 外鍵與關系表設計 一.分組查詢 1.語法:group by 分組字段1[,分組字段2,.........] [having 分組後的篩選條件]2.註意:分組字段應該與select後的查詢字段一致,否則查詢結果無意義3.分組查詢經常會與聚合函