Java入门教程十二(集合与泛型) (3)

Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序

Map 接口中提供的常用方法

V get(Object key) 返回 Map 集合中指定键对象所对应的值。V 表示值的数据类型 V put(K key, V value) 向 Map 集合中添加键-值对,返回 key 以前对应的 value,如果没有, 则返回 null V remove(Object key) 从 Map 集合中删除 key 对应的键-值对,返回 key 对应的 value,如 果没有,则返回null Set entrySet() 返回 Map 集合中所有键-值对的 Set 集合,此 Set 集合中元素的数据 类型为 Map.Entry Set keySet() 返回 Map 集合中所有键对象的 Set 集合 Map map=new HashMap(); map.put("1","HelloWorld"); map.put("2","HelloWorld"); Collection类

Collections 类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、填充和复制等操作

正向排序

sort() 方法主要有如下两种重载形式。

void sort(List list):根据元素的自然顺序对集合中的元素进行升序排序。 void sort(List list,Comparator comparator):按 comparator 参数指定的排序方式对集合中的元素进行排序。 List test=new ArrayList(); test.add(2); test.add(1); test.add(3); Collections.sort(test); //此时数组为1,2,3 逆向排序

调用 reverse() 静态方法可以对指定集合元素进行逆向排序

void reverse(List list) //对集合中的元素进行反转排序 List test=new ArrayList(); test.add(2); test.add(1); test.add(3); Collections.reverse(test); //此时数组为3,2,1 复制

Collections 类的 copy() 静态方法用于将指定集合中的所有元素复制到另一个集合中

void copy(List <? super T> dest,List<? extends T> src) List srcList=new ArrayList(); destList.add("1"); destList.add("2"); List destList=new ArrayList(); Collections.copy(destList,srcList);//此时destList为1,2 填充

Collections 类的 fill() 静态方法可以对指定集合的所有元素进行填充操作

void fill(List<? super T> list,T obj) //使用指定元素替换指定列表中的所有元素 List test=new ArrayList(); test.add("1"); test.add("2"); Collections.fill(srcList,"0"); //此时List里全是0 泛型

泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。

泛型集合

泛型本质上是提供类型的“类型参数”,也就是参数化类型。我们可以为类、接口或方法指定一个类型参数,通过这个参数限制操作的数据类型,从而保证类型转换的绝对安全。

public class Person{ private String name; public Person(String _name) { this.name=_name; } } Map<Integer, Person> persons=new HashMap<Integer, Person>(); //定义泛型 Map 集合 persons.add(new Person("HelloWorld"));

Map<Integer, Person> persons =new HashMap<Integer, Person>();”创建了一个键类型为 Integer、值类型为 Person 的泛型集合,即指明了该 Map 集合中存放的键必须是 Integer 类型、值必须为 Person 类型,否则编译出错。

Person preson = persons.get(0);//在获取 Map 集合中的元素时,不需要将"persons.get(id);"获取的值强制转换为 Person 类型,程序会隐式转换 泛型类

除了可以定义泛型集合之外,还可以直接限定泛型类的类型参数。

public class class_name<data_type1,data_type2,…>{} //泛型类一般用于类中的属性类型不确定的情况下。 private data_type1 property_name1;

在实例化泛型类时,需要指明泛型类中的类型参数,并赋予泛型类属性相应类型的值

public class Person<T>{ private T param; public T getParam(){ return param; } public void setParam(T _param){ this. param = _param; } } public class Employee{ //类型体 } public static void main(String[] args){ //约束为整形 Person<Integer> intergerPerson = new Person<Integer>(); intergerPerson. setParam(1); //约束为字符串类型 Person<String> intergerPerson1 = new Person<String>(); intergerPerson1. setParam("String"); //除基础类型外,也可以约束为自定义类型 Person<Employee> intergerPerson2 = new Person<Employee>(); intergerPerson1. setParam(new Employee()); }

泛型类中的类型参数可以有多个

public class Person<T,N,S>{ //使用同上 } 泛型方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjjzy.html