string转map集合_集合(下)
7 Set 接口
Set 接口表示一個唯一、無序的容器(和添加順序無關)。
7.1 Set 提供的方法
public static void main(String[] args) {/*** 增:add/addAll* 刪:clear/remove/removeAll/retainAll* 改:* 查:contains/containsAll* 遍歷:iterator* 其他:size/isEmpty*/Set<Integer> set = new HashSet<Integer>();// [1]添加// 無序set.add(10);set.add(3);set.add(20);set.add(0);// 不能添加重復元素boolean r = set.add(1);System.out.println(set);// 【2】刪除 // set.remove(1); // set.clear(); // System.out.println(set);// 【3】查看是否包含System.out.println(set.contains(1));// 【4】其他System.out.println(set.size());System.out.println(set.isEmpty()); }7.2 Set 的遍歷
public static void main(String[] args) {Set<String> set = new HashSet<String>();set.add("banana");set.add("apple");set.add("coco");// 快速遍歷for (String item : set) {System.out.println(item);}// 迭代器Iterator<String> it = set.iterator();while(it.hasNext()) {String item = it.next();System.out.println(item);} }8 HashSet
HashSet 是 Set 接口的實現類,底層數據結構是哈希表。HashSet 是線程不安全的(不保證同步)。優點:添加、刪除、查詢效率高;缺點:無序
8.1 添加自定義對象
如果向 HashSet 中存儲元素時,元素一定要實現hashCode方法和equals方法。
public class Student {private String id;private String name;private int age;@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((id == null) ? 0 : id.hashCode());result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}//當屬性相同時,兩個對象的 hashcode 相同,判斷兩個對象相等的必要不充分條件@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;if (age != other.age)return false;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}//兩個對象相等的充分必要條件@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";}}9 LinkedHashSet
LinkedHashSet是Set接口的實現類,底層數據結構哈希表+鏈表。哈希表用于散列元素;鏈表用于維持添加順序。如果要添加自定義對象元素,也需要重寫 hashCode 和 equals 方法。
10 TreeSet
TreeSet 是Set接口的實現類,底層數據結構是二叉樹。TreeSet 存儲的數據按照一定的規則存儲。存儲規則讓數據表現出自然順序。
10.1 工作原理
添加一個新元素 t 的存儲的步驟:
輸出時按照一定的規則:左子樹->根節點->右子樹
向TreeSet中添加元素時,一定要提供比較策略,否則會出現 ClassCastException。
10.2 內部比較器
當一個自定義對象實現Comparable并實現compareTo方法時,通過指定具體的比較策略,此時稱為內部比較器。
public class Student implements Comparable<Student>{private String id;private String name;private int age;@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";}@Overridepublic int compareTo(Student o) {if(this.getAge()<o.getAge()) {return -1;}else if(this.getAge() == o.getAge()) {return 0;}else {return 1;}}}默認的比較器是按升序排列,所以只要重寫的 compareTo 方法也是參數較大時返回 -1 即可實現升序排列。
10.3 外部比較器
當實際開發過程中不知道添加元素的源代碼、無權修改別人的代碼,此時可以使用外部比較器。TreeSet 接受一個指定比較策略的構造方法,這些比較策略的實現類必須實現 Compa-rator 接口。Comparator 位于java.util包中,定義了compare (o1,o2) 用于提供外部比較策略。推薦使用匿名內部類方法實現。
public static void main(String[] args) {TreeSet<String> set2 = new TreeSet<String>(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.length() - o2.length();}});//比較規則是字符串長度的升序set2.add("banana");set2.add("coco");set2.add("apple");set2.add("apple");System.out.println(set2);}11 Map 接口
Map接口稱為鍵值對集合或者映射集合,其中的元素(entry)是以鍵值對(key-value)的形式存在。Map 容器接口中提供了增、刪、改、查的方式對集合進行操作。Map接口中都是通過key來操作鍵值對,一般key是已知。通過key獲取value。
11.1 Map 常用方法
public static void main(String[] args) {/*** 增:put/putAll* 刪:clear/remove* 改:put* 查:get/containsKey/containsValue* 其他:isEmpty/size*/Map<String, String> map = new HashMap<String,String>();// 【1】putmap.put("A", "apple");map.put("B", "banana");map.put("C", "coco");// 【2】刪除// map.clear();// smap.remove("A");// 【3】修改//map.put("A", "apple x");// 【4】查看String val = map.get("A");System.out.println(map.containsKey("D"));System.out.println(map); }11.2 Map 的遍歷
- 通過keySet() 返回map中鍵的set集合。
- Map 中以鍵值對作為元素,鍵值對在map中稱為entry,entrySet() 返回鍵值對的set集合,通過此集合遍歷。
12 HashMap
HashMap 是 Map 的實現類,key 以 HashSet 存儲。HashMap 線程不安全,jdk1.2;Hashtable 是 HashMap 的線程安全版本,jdk1.0。向HashMap中存儲元素時,key一定要實現 hashCode 和 equals。
13 LinkedHashMap
LinkedHashMap 是 Map 接口的實現類,key 以 LinkedHashSet 存儲。哈希表散列key,鏈表維持key的添加順序。
14 TreeMap
TreeMap 是 Map 的實現類,key 以 TreeSet 存儲。key 如 TreeSet 一樣要具有比較器。
15 總結
總結
以上是生活随笔為你收集整理的string转map集合_集合(下)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习之生成学习算法
- 下一篇: 集成学习算法之boosting、bagg