码迷,mamicode.com
首页 > 其他好文 > 详细

2018.6.11 集合和泛型的课后练习总结

时间:2018-06-11 11:05:39      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:自动   编译   操作   完成   强制转换   类型擦除   原理   静态   public   

介绍Set接口和List接口的区别 提及 介绍Map接口

Collection表示一组对象,这些对象也称为collection的元素;一些 collection允许有重复的元素,而另一些则不允许;一些collection是有序的,而另一些则是无序的;JDK中不提供此接口的任何直接实 现,它提供更具体的子接口(如 Set 和 List)实现;Map没有继承Collection接口,Map提供key到value的映射;一个Map中不能包含相同key,每个key只能映射一个value;Map接口提供3种集合的视图,Map的内容可以被当做一组key集合,一组value集合,或者一组key-value映射;

List和Set接口自Collection接口,而Map不是继承的Collection接口
List接口  
    元素有放入顺序,元素可重复 

    List接口有三个实现类:LinkedList,ArrayList,Vector 



基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作

##2.JAVA中Collection和Collections的区别

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。 
Collection是个java.util下的接口,它是各种集合结构的父接口。

Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
     它有两个常用的子接口,List:对元素都有定义索引。有序的。可以重复元素;Set:不可以重复元素。无序。

2.1 java.util.Collections 是一个包装类。 这个类不能被实例化

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test {

    public static void main(String args[]) {
        //注意List是实现Collection接口的
        List list = new ArrayList();
        int array[] = {5, 1, 3, 4, 2};
        for (int i = 0; i < array.length; i++) {
            list.add(array[i]);
        }
        Collections.sort(list);
        for (int i = 0; i < array.length; i++) {
            System.out.println(list.get(i)); // 结果:1 2 3 4 5
        }
       
    }
}




具体来看下Collections中的sort方法:(以下代码摘自Collections类中源码)
 public static <T extends Comparable<? super T>> void sort(List<T> list) {
        Object[] a = list.toArray();
        Arrays.sort(a);
        ListIterator<T> i = list.listIterator();
        for (int j=0; j<a.length; j++) {
            i.next();
            i.set((T)a[j]);
        }
    }

3.请简要介绍使用泛型的好处

·泛型简单易用

·类型安全 泛型的主要目标是实现java的类型安全。 泛型可以使编译器知道一个对象的限定类型是什么,这样编译器就可以在一个高的程度上验证这个类型

·消除了强制类型转换 使得代码可读性好,减少了很多出错的机会

J·ava语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

3.1 泛型的实现原理

泛型的实现是靠类型擦除技术 类型擦除是在编译期完成的 也就是在编译期 编译器会将泛型的类型参数都擦除成它的限定类型,如果没有则擦除为object类型之后在获取的时候再强制类型转换为对应的类型。 在运行期间并没有泛型的任何信息,因此也没有优化。

2018.6.11 集合和泛型的课后练习总结

标签:自动   编译   操作   完成   强制转换   类型擦除   原理   静态   public   

原文地址:https://www.cnblogs.com/qichunlin/p/9160202.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!