《温故而知新》JAVA基础八

集合接口与泛型

  1. 定义: 集合接口会操作一系列相同属性数据的对象类型的数据结构,类似于数组,但是相对于数组来说更显得高端大气

  2. 集合的接口分为Collention和Map两大类,不直接操作,而是通过子类的实现来操作

  3. 常用的集合有

  • Collection->List里面的ArrayList
  • Collection->Set里面的HashSet
  • Map(以键值对的形式)里面的HashMap
  1. Set和List的区别
Set 接口实例存储的是无序的,不重复的数据。
List 接口实例存储的是有序的,可以重复的元素。

遍历数据

  1. 遍历 ArrayList
//申明数据类型是String对象类型的集合
List<String> list = new List<String>()
//向集合里面添加数据
list.add("hello")
list.add("world")
1. //第一种方式:通过foreatch
for (String str : list) {            //也可以改写for(int i=0;i<list.size();i++)这种形式
        System.out.println(str);
 }

2. //第二种遍历,把链表变为数组相关的内容进行遍历
     String[] strArray=new String[list.size()];
     list.toArray(strArray);
     for(int i=0;i<strArray.length;i++) //这里也可以改写为  foreach(String str:strArray)这种形式
     {
        System.out.println(strArray[i]);
     }
3. //第三种遍历 使用迭代器进行相关遍历
     
     Iterator<String> ite=list.iterator();
     while(ite.hasNext())//判断下一个元素之后有值
     {
         System.out.println(ite.next());
     }
     
  1. 遍历Map
import java.util.*;
 
public class Test{
     public static void main(String[] args) {
      Map<String, String> map = new HashMap<String, String>();
      map.put("1", "value1");
      map.put("2", "value2");
      map.put("3", "value3");
      
      //第一种:普遍使用,二次取值
      System.out.println("通过Map.keySet遍历key和value:");
      for (String key : map.keySet()) {
       System.out.println("key= "+ key + " and value= " + map.get(key));
      }
      
      //第二种
      System.out.println("通过Map.entrySet使用iterator遍历key和value:");
      Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
      while (it.hasNext()) {
       Map.Entry<String, String> entry = it.next();
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }
      
      //第三种:推荐,尤其是容量大时
      System.out.println("通过Map.entrySet遍历key和value");
      for (Map.Entry<String, String> entry : map.entrySet()) {
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }
    
      //第四种
      System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
      for (String v : map.values()) {
       System.out.println("value= " + v);
      }
     }
}

泛型

  1. 定义:所谓泛型值得就是函数得参数得数据类型可以是任何得数据类型,不会因为参数类型的不同导致程序崩溃
// 泛型方法 printArray           //E类泛型            
   public static < E > void printArray( E[] inputArray )
   {
      // 输出数组元素            
         for ( E element : inputArray ){        
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }

使用:
       // 创建不同类型数组: Integer, Double 和 Character
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
              System.out.println( "整型数组元素为:" );
        printArray( intArray  ); // 传递一个整型数组
 
        System.out.println( "
双精度型数组元素为:" );
        printArray( doubleArray ); // 传递一个双精度型数组
 
        System.out.println( "
字符型数组元素为:" );
        printArray( charArray ); // 传递一个字符型数组
  1. 有界得类型参数
public static <T extends Comparable<T>> T maximum(T x, T y, T z){
    //extends 后面接上上线
}
  1. 泛型类,类后加上参数类型
public class Box<T> {
   
  private T t;
 
  public void add(T t) {
    this.t = t;
  }
 
  public T get() {
    return t;
  }
 
  public static void main(String[] args) {
    Box<Integer> integerBox = new Box<Integer>();
    Box<String> stringBox = new Box<String>();
 
    integerBox.add(new Integer(10));
    stringBox.add(new String("菜鸟教程"));
 
    System.out.printf("整型值为 :%d

", integerBox.get());
    System.out.printf("字符串为 :%s
", stringBox.get());
  }
}
  1. 泛型通配符?
public class GenericTest {
    
    public static void main(String[] args) {
        List<String> name = new ArrayList<String>();
        List<Integer> age = new ArrayList<Integer>();
        List<Number> number = new ArrayList<Number>();
        
        name.add("icon");
        age.add(18);
        number.add(314);
 
        getData(name);
        getData(age);
        getData(number);
       
   }
 //List<?>代表List<String>,List<Integer等
   public static void getData(List<?> data) {
      System.out.println("data :" + data.get(0));
   }
}
原文地址:https://www.cnblogs.com/allenxieyusheng/p/9018676.html