• map,list,set的遍历方法


      1 package cn.demo.jdk5;
      2 
      3 import java.util.ArrayList;
      4 import java.util.Arrays;
      5 import java.util.HashMap;
      6 import java.util.Iterator;
      7 import java.util.LinkedList;
      8 import java.util.List;
      9 import java.util.Map;
     10 import java.util.Set;
     11 import java.util.TreeSet;
     12 import java.util.Map.Entry;
     13 
     14 import org.junit.Test;
     15 
     16 public class GenericTest {
     17     @Test
     18     public void demo11() {
     19         List<?> list = new ArrayList<String>(); // ? 代表任意类型
     20         // list.add("aaa");
     21         // list.add(111);
     22         // 当使用通配符后,不要使用类型相关方法
     23 
     24         List<? extends String> list2 = new ArrayList<String>();
     25 
     26         List<? extends Number> list3 = new ArrayList<Integer>();
     27 
     28         List<? super String> list4 = new ArrayList<Object>();
     29     }
     30 
     31     @Test
     32     public void demo10() {
     33         // 打印数组中所有元素内容
     34         List<String> list = new LinkedList<String>();
     35 
     36         list.add("aaa");
     37         list.add("bbb");
     38         list.add("ccc");
     39         print(list);
     40 
     41         List<Integer> list2 = new LinkedList<Integer>();
     42 
     43         list2.add(111);
     44         list2.add(222);
     45         list2.add(333);
     46 
     47         print(list2);
     48     }
     49 
     50     // ? 代表任意类型
     51     public void print(List<?> list) { // 泛型类型 可以是任何类型 --- 泛型通配符
     52         for (Object string : list) {
     53             System.out.println(string);
     54         }
     55     }
     56 
     57     @Test
     58     public void demo9() {
     59         // 测试 泛型类 使用
     60         /*
     61          * 在创建工具类对象时,使用泛型String, 这个工具类对象完成对String数组 倒序和 交换
     62          */
     63         ArraysUtils<String> arraysUtils = new ArraysUtils<String>();
     64         String[] arr1 = { "aaa", "bbb", "ccc", "ddd" };
     65         // 交换位置
     66         arraysUtils.changePosition(arr1, 1, 3);
     67         System.out.println(Arrays.toString(arr1));
     68 
     69         // 倒序
     70         arraysUtils.reverse(arr1);
     71         System.out.println(Arrays.toString(arr1));
     72     }
     73 
     74     @Test
     75     public void demo8() {
     76         // 将数组元素 倒序
     77         String[] arr1 = { "aaa", "bbb", "ccc", "ddd" }; // ddd ccc bbb aaa
     78         reverse(arr1);
     79         System.out.println(Arrays.toString(arr1));
     80 
     81         Integer[] arr2 = { 1, 2, 3, 4, 5 }; // 倒序
     82         reverse(arr2);
     83         System.out.println(Arrays.toString(arr2));
     84 
     85     }
     86 
     87     // 将数组倒序
     88     public <T> void reverse(T[] arr) {
     89         /*
     90          * 只需要遍历数组前一半元素,和后一半元素 对应元素 交换位置
     91          */
     92         for (int i = 0; i < arr.length / 2; i++) {
     93             // String first = arr[i];
     94             // String second = arr[arr.length - 1 - i];
     95             T temp = arr[i];
     96             arr[i] = arr[arr.length - 1 - i];
     97             arr[arr.length - 1 - i] = temp;
     98         }
     99     }
    100 
    101     @Test
    102     public void demo7() {
    103         Integer[] arr1 = new Integer[] { 1, 2, 3, 4, 5 };
    104         // 交换数组 两个指定位置元素 将2,4 交换位置
    105         changePosition(arr1, 1, 3); // 使用泛型方法 参数必须是对象类型
    106 
    107         System.out.println(Arrays.toString(arr1));
    108 
    109         String[] arr2 = new String[] { "aaa", "bbb", "ccc", "ddd" };
    110         // 交换 aaa和 ccc的位置
    111         changePosition(arr2, 0, 2);
    112 
    113         System.out.println(Arrays.toString(arr2));
    114 
    115     }
    116 
    117     // 使用泛型 编写交换数组通用方法,类型可以String 可以 int --- 通过类型
    118     public <T> void changePosition(T[] arr, int index1, int index2) {
    119         T temp = arr[index1];
    120         arr[index1] = arr[index2];
    121         arr[index2] = temp;
    122     }
    123 
    124     // public void changePosition(String[] arr, int index1, int index2) {
    125     // String temp = arr[index1];
    126     // arr[index1] = arr[index2];
    127     // arr[index2] = temp;
    128     // }
    129     //
    130     // // 传递数组 传递数组引用地址 ---- 不需要返回值
    131     // public void changePosition(int[] arr, int index1, int index2) {
    132     // int temp = arr[index1];// 将第一个元素保存到temp
    133     // arr[index1] = arr[index2]; // 将第二个元素值 赋值 给第一个元素
    134     // arr[index2] = temp; // 将temp的值 保存第二个元素
    135     // }
    136 
    137     @Test
    138     public void demo6() {
    139         List<Integer> ints = new LinkedList<Integer>(); // 第一句 泛型 两端 一样的
    140         // List<Number> nums = new LinkedList<Integer>(); // 第二句 Number是
    141         // Integer的父类型 ,表达式两端泛型不一致,会导致编译错误
    142 
    143     }
    144 
    145     @Test
    146     public void demo5() {
    147         // 使用类型安全的Map -- 因为map是一个键值对结构,执行两个类型泛型
    148         Map<String, String> map = new HashMap<String, String>();
    149 
    150         map.put("aaa", "111");
    151         map.put("bbb", "222");
    152 
    153         // 因为使用了泛型,所以key和value类型都必须为String
    154 
    155         // 取出map元素 ----- 两种
    156         // 第一种 通过 Map 的 keySet进行遍历
    157         Set<String> keys = map.keySet(); // 获得key集合
    158         for (String key : keys) {
    159             System.out.println(key + ":" + map.get(key));
    160         }
    161         System.out.println("-------------------------");
    162 
    163         // 第二种 通过 map的 entrySet ---- 获得每一个键值对
    164         Set<Map.Entry<String, String>> entrySet = map.entrySet(); // 每一个元素
    165         // 就是一个键值对
    166         for (Entry<String, String> entry : entrySet) {
    167             // 通过 entry的 getKey和getValue获得每一个键和值
    168             System.out.println(entry.getKey() + ":" + entry.getValue());
    169         }
    170 
    171     }
    172 
    173     @Test
    174     public void demo4() {
    175         // 使用类型安全Set
    176         Set<String> set = new TreeSet<String>();
    177 
    178         set.add("asd");
    179         set.add("fdf");
    180         set.add("bxc");
    181         // 因为使用泛型 只能添加String类型元素
    182 
    183         // 取出Set元素 --- 两种 因为Set是无序的,所以比List少一种遍历方法
    184         // 第一种 继承 Collection 所以使用 Iterator 遍历
    185         Iterator<String> iterator = set.iterator();
    186         while (iterator.hasNext()) {
    187             String s = iterator.next();
    188             System.out.println(s);
    189         }
    190         System.out.println("------------------------");
    191         // 第二种 JDK5 引入 foreach 可以使用foreach 遍历 Set
    192         for (String s : set) {
    193             System.out.println(s);
    194         }
    195 
    196     }
    197 
    198     @Test
    199     public void demo3() {
    200         // 使用类型安全List
    201         List<String> list = new LinkedList<String>();
    202 
    203         list.add("aaa");
    204         list.add("bbb");
    205         list.add("ccc");
    206         // 因为使用泛型,只能将list添加 String类型 元素
    207 
    208         // 遍历List --- 三种
    209         // 第一种 因为List是有序的(存入顺序和取出顺序一样) 通过 size 和 get方法进行遍历
    210         for (int i = 0; i < list.size(); i++) {
    211             String s = list.get(i);
    212             System.out.println(s);
    213         }
    214         System.out.println("---------------------------------------------");
    215         // 第二种 因为List 继承 Collection 接口 ,通过 Collection的iterator进行遍历
    216         Iterator<String> iterator = list.iterator();
    217         // 遍历iterator 通过 迭代器 hasNext 和 next 方法进行遍历
    218         while (iterator.hasNext()) {
    219             String s = iterator.next();
    220             System.out.println(s);
    221         }
    222         System.out.println("---------------------------------------------");
    223 
    224         // 第三种 JDK5 引入 foreach循环 结构 ,通过foreach结构 遍历 list
    225         for (String s : list) {
    226             System.out.println(s);
    227         }
    228         System.out.println("----------------------------------------------");
    229     }
    230 
    231     @Test
    232     public void demo2() {
    233         // 应用泛型 集合
    234         List<String> list = new ArrayList<String>(); // 这个list中只能存放 String 类型数据
    235         // list.add(123); // 只能添加Strring
    236         list.add("abc");
    237         list.add("def");
    238 
    239         // 取出集合数据
    240         for (int i = 0; i < list.size(); i++) {
    241             String s = list.get(i);
    242             System.out.println(s.toUpperCase());
    243         }
    244     }
    245 
    246     @Test
    247     public void demo1() {
    248         // JDK5 之前 集合对象
    249         List list = new ArrayList();
    250         // 因为没有泛型类型检查,添加对象可以是任意类型
    251         list.add("abc");
    252         list.add(123);
    253 
    254         // 操作集合中对象,遍历集合 将数据取出来 通过 size()方法和 get(index)方法 遍历 list 集合
    255         for (int i = 0; i < list.size(); i++) {
    256             // 取出对象时,数据类型丢失了
    257             Object o = list.get(i);
    258             // 操作 String 方法 ---- 强制将数据转换 相应类型
    259             String s = (String) o;
    260             System.out.println(s.toUpperCase());
    261         }
    262     }
    263 
    264     // public static void main(String[] args) {
    265     // // 应用泛型 集合
    266     // List<String> list = new ArrayList<String>(); // 这个list中只能存放 String 类型数据
    267     // // list.add(123); // 只能添加Strring
    268     // list.add("abc");
    269     // list.add("def");
    270     //
    271     // // 取出集合数据
    272     // for (int i = 0; i < list.size(); i++) {
    273     // String s = list.get(i);
    274     // System.out.println(s.toUpperCase());
    275     // }
    276     // }
    277 }
    java
  • 相关阅读:
    linux下内存检测工具valgrind
    c语言可变参数与宏定义
    rabbitmq学习之路-rabbitmqctl
    linux/mac下命令行rm回收站--rmtrash
    Python之路【第十一篇】: 进程与线程理论篇
    Python之路【第十一篇】: 进程与线程
    Git常用命令
    Python之路【第十篇】: python基础之socket编程
    Python之路【第九篇】:面向对象进阶
    Python之路【第八篇】:面向对象的程序设计
  • 原文地址:https://www.cnblogs.com/mmmmm/p/8462169.html
Copyright © 2020-2023  润新知