日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java集合(八) 迭代器Iterator、泛型、Map映射

發(fā)布時間:2024/4/30 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合(八) 迭代器Iterator、泛型、Map映射 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、 迭代器

  • 迭代器的增刪作用于原集合
  • 用迭代器遍歷集合 , 用指針的挪動來獲取對應的元素,通過標記這個元素是否可以用來操作 去操作原集合。
  • 在迭代過程中不允許直接操作原集合。
  • forEach --- 本質(zhì)上也是做迭代遍歷 ,如果一個對象能使用增強for循環(huán),那么這個類必須實現(xiàn) Iterable。
  • JDK1.5的新特性之一。
  • /** 迭代器練習*/ public class IteratorTest_01 {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("張三");list.add("李四");//獲取迭代器對象Iterator<String> iterator = list.iterator();//通過迭代器遍歷集合//判斷是否有下一個元素while(iterator.hasNext()){//挪動指針,獲取元素String s = iterator.next();System.out.println(s);//移除當前元素 ---- 作用于原集合 // iterator.remove();//在迭代過程中 ,不允許直接操作原集合 爆java.util.ConcurrentModificationException異常list.remove(s);list.add("王五");}System.out.println(list);} }

二、 泛型

  • 學名: 參數(shù)化類型 ?--- 頂級泛型接口?ParameterizedType ?--- JDK1.5新特性之一。
  • 起強制限定的作用。 提高運行和編譯的效率。
  • 用具體類型來替換泛型的操作 --- 泛型的擦除
  • 使用泛型之后效率略低 ,多了泛型的推導和擦除過程。
  • /** 泛型的定義* 泛型在定義時只要符合標識符的命名規(guī)則即可 ,但習慣上是使用一個大寫字母表示泛型* T type* E Elements* K key* V value* R result* 當定多個泛型的時候,泛型之間用","隔開* */ public class GenericTest_01 {public static void main(String[] args) {} } class Demo<T> {private T t;public Demo() { // t = new T(); //錯誤 , 因為不知道具體的類型 ,所以JVM無法分配具體的內(nèi)存空間。}//泛型可以用作返回值類型public T getT() {return t;}//泛型可以用作參數(shù)public void setT(T t) {this.t = t;}//參數(shù)類型不確定 ,希望傳入任意類型的參數(shù)之后 ,轉換為T類型//不能定義正在一個類上 ,為當前方法定義一個屬于當前方法的泛型private <E> T change(E e) {return (T)e;}//參數(shù)類型確定 ,但返回值類型不確定private <R>R change2 (T t){return (R)t;}//參返都不確定private <A,B>B change3(A a){return (B)a;} }
  • 泛型的繼承 -- ? ?:表示泛型的通配符 , 表示此時需要泛型 ,但是不能確定類型/** 泛型類的繼承* */ public class GenericTest_02 {public static void main(String[] args) {List<Integer> list1 = Arrays.asList(1,3,5,7,4,3,2);List<Double> list2 = Arrays.asList(1.0,34.0,55.0,7.0,5.0,4.0,3.0);it(list1);it(list2);}//泛型不向下兼容 泛型Number不能接受數(shù)值類型的值// ? extends Number 表示傳入的這個類或接口 是Number 的子類// 無論是類還是接口 ,這里一律用extends // Number規(guī)定了 泛型的上限public static void it(List<? extends Number> list) {//由于不確定子類的類型 ,所以不能向集合中添加元素 ,只能添加null // list.add(4); // list.add(null);for(Number n : list ){System.out.println(n);}}//可以傳入String及其父類// ? super 類\接口 表示 可以傳入 這個類的子類\接口 元素// 規(guī)定了泛型的下限//規(guī)定了下限之久能夠添加元素//同一個泛型不能既規(guī)定上限 , 有規(guī)定下限public static void it1(List<? super String> list){} }
  • 是JDK1.5的新特性之一

三、 Map<K , V>映射

  • 映射 。 ?一個鍵對應一個值 --- map中的元素是以鍵值對的形式存在的。
  • 鍵唯一 ?, 值唯一 。
  • Map本身不是集合 , 但是集合框架中的一員。
  • 集合框架中包含了集合 、映射以及操作集合和映射的工具 。
  • Entry ?--- 代表鍵值對的接口 --- Map中的內(nèi)部接口
  • 一個Map對象實際上是由多個Entry對象組成的。
  • HashMap ** 重點 **
    • 允許值為null , 允許鍵為null。
    • 默認初始容量為16 , 加載因子為0.75f , 每次擴容一倍 。 本身是一個異步式線程不安全的映射。
  • HashTable ** ?記住 **
    • 任何非null值都可以作為鍵和值 ? --- ?鍵值都不允許為null。
    • 默認初始容量為11 , 加載因子為0.75f ?, 容量超過75% 時 開始擴容 , 本身是一個同步式線程安全的映射。
    • 效率低
    • 是 java中最早的映射。
  • ComcurrenHashMap?
    • 異步式線程安全的映射
  • Dictionary是所有映射的父類。
  • /** Map * */ public class MapTest_01 {public static void main(String[] args) {//表示 鍵為String類型 , 值為 Integer類型Map<String ,Integer> map = new HashMap<String , Integer>();//添加元素map.put("a", 1);map.put("b", 2);map.put("c", 3);map.put("d", 4);//覆蓋元素map.put("a", 5);//將所有的值放入一個Collection集合System.out.println("map中所有值:"+map.values());//獲取鍵值對的個數(shù)System.out.println("map中鍵值對的個數(shù):"+map.size());//判斷映射是否為空System.out.println("map是否為空:"+map.isEmpty());//根據(jù)鍵獲取對應的值System.out.println("c對應的值是:"+map.get("c"));//判斷映射中是否包含指定的鍵System.out.println("map中是否有d:"+map.containsKey("d"));//刪除元素map.remove("b");//清空映射map.clear();//映射中的toString方法做過重寫System.out.println(map.toString());} }
  • package com.tj.tedu;import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set;/** map遍歷的三種方式* */ public class MapTest_02 {public static void main(String[] args) {//表示 鍵為String類型 , 值為 Integer類型Map<String ,Integer> map = new HashMap<String , Integer>();//添加元素map.put("a", 1);map.put("b", 2);map.put("c", 3);map.put("d", 4);//方式一Set<String> keySet = map.keySet();for( String key : keySet){System.out.println(key+"="+map.get(key));}System.out.println("-----------------------------------");//方式二Set<Entry<String, Integer>> entrySet = map.entrySet();for(Entry e : entrySet){System.out.println(e.getKey()+"="+e.getValue());}System.out.println("-----------------------------------");//方式三Set<Entry<String, Integer>> entrySet2 = map.entrySet();Iterator<Entry<String, Integer>> iterator = entrySet2.iterator();while(iterator.hasNext()){Entry<String, Integer> next = iterator.next();System.out.println(next.getKey()+"="+next.getValue());}} }
    練習:輸入一個數(shù)以及對應個數(shù)的Integer鍵值對 ,輸出要求:鍵從小到大排序 , 如果出現(xiàn)了重復的鍵 , 則要求對應的值求和 。?// 輸入一個數(shù)以及對應個數(shù)的Integer鍵值對 ,輸出要求:鍵從小到大排序 , 如果出現(xiàn)了重復的鍵 , 則要求對應的值求和 。 public class Test_03 {public static void main(String[] args) {//在Scanner類中 , 除了nextLine()方法以外 , 其余的方法是以空格作為 結束符Scanner in = new Scanner(System.in);System.out.println("請輸入數(shù)據(jù)的個數(shù) :");int count = in.nextInt();System.out.println("請依次輸入數(shù)據(jù),中間以,隔開:");in.nextLine();List<String> l = new ArrayList<String>();for(int i = 0 ; i<count ;i++){l.add(in.nextLine());}//排序l.sort(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return new Integer(o1.split(",")[0])-new Integer(o2.split(",")[0]);}});//放入Map如果鍵相同 , 則值求和Map<Integer , Integer> map = new HashMap<Integer, Integer>();for(int i = 0 ; i<count ; i++){Integer key = new Integer(l.get(i).split(",")[0]);Integer value = new Integer(l.get(i).split(",")[1]);if(map.containsKey(key)){map.put(key, map.get(key)+value);}else{map.put(key, value);}}System.out.println(map);}}








總結

以上是生活随笔為你收集整理的Java集合(八) 迭代器Iterator、泛型、Map映射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。