java基础14(Javaoo9)——集合框架


java基础14(Javaoo9)——Java集合框架(Java Collection Framework

(简称JCF)

1.什么是框架?

—— 为了解决某一问题而预先设计的具有继承关系的类与接口,在使用过程中,只需从中选择相应的就可以实现功能.
集合框架包括三大内容:对外接口、接口的实现、对集合运算的方法

2.集合分类:List(列表)、Set(集)、Map(映射)

—— 了解各自的特点,分清楚什么时候用?
Collection是集合框架的根接口(核心接口)
Collection直接衍生List、Set接口,间接衍生Map接口
语法:
1.集合的基本操作:放,取,删,改,遍历
2.新知识点:①泛型 ②迭代器 ③hadhcode()
3.集合工具类:比较器
1.List(列表):
public class TestList {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         * List--列表。特点:线性--有序---外部放入的顺序即为列表存的顺序,所以有下标
         *       
         * 最常用子类---ArrayList、LinkedList
         * 
         */
        
        //首先产生集合类的对象
        //ArrayList---底层实现就是使用的数组,它完成对数组的封装
        //LinkedList--底层实现采用双向链表的结构
        /*
         * ArrayList与LinkedList的使用场景
         * 1、当需要大量做查询某个元素的时候,ArrayList效率高于LinkedList
         * 2、往尾部添加或删除元素,ArrayList效率高于LinkedList
         * 3、往中间添加或删除元素,LinkedList效率高于ArrayList
         * 
         * 面试时常常用ArrayList与Vector做辨析
         * 因为:Vector同样是List分支下面的集合类,底层使用的数据结构仍然是数组,提供的方法也是同样的API
         * 差异:1、ArrayList是线程不安全的,效率高的
         *     2、Vector是线程安全的,效率低的
         * 使用场景:Vector在多线程情况下,且可能出现线程安全性问题时,才会用来替代ArrayList
         * 
         */
//        ArrayList lst = new ArrayList();
        LinkedList lst = new LinkedList();
        //<类型>---泛型---表示该集合只能存放该类型及其子类的元素 
        LinkedList<Student> stuLst = new LinkedList<Student>();
        
        //使用集合类对象
        //1、放入元素
        lst.add("hello");
        lst.add(new Date());
        lst.add(new Student("zhang3",25,78));
        lst.add(10);//自动封箱
        
        stuLst.add(new Student("Li4",18,88));
        
        //2、得到元素个数
        System.out.println(lst.size());
        
        //3、可以根据位置获取某个元素
        System.out.println(lst.get(1));
        
        Student stu = stuLst.get(0);
        
        //4、可以修改某个位置的元素
        lst.set(3, 250);
        System.out.println(lst.get(3));
        System.out.println(lst.contains(250));
        
        //5、删除某个位置的元素
        lst.remove(3);
        System.out.println("==========================================");
        
        //6、对List进行遍历
        //6-1、普通for循环
        for(int i = 0; i < lst.size(); i++){
            System.out.println(lst.get(i));
        }
        
        //6-2、for-each循环---JDK1.5之后使用
        for(Object obj : lst){
            System.out.println(obj);
        }
        
        //6-3、集合框架类专用遍历方式---迭代器--Iterator--JDK1.5之前使用
        Iterator it = lst.iterator();//获得迭代器对象
        while(it.hasNext()){
            Object obj = it.next();
            System.out.println(obj);
        }
        
    }
}  

2.Set(集):

public class TestSet {
    
    public static void main(String[] args) {
        
        /*
         * Set--集。特点:不能存放重复元素,无序---外部放入的顺序不是内部存放的顺序,所以没有下标
         *       
         * 最常用子类---HashSet
         * 
         */
        
        //首先产生集合对象
//        HashSet set = new HashSet();
//        HashSet<Student>  stuSet = new HashSet<Student>();
        
        //使用集合类对象
        //1、放入元素
//        set.add("hello");
//        set.add(new Date());
//        set.add(new Student("zhang3",25,78));
//        set.add(10);//自动封箱
//        set.add("hello");
//        
//        stuSet.add(new Student());
        
        //2、得到元素个数
//        System.out.println(set.size());
        
        //3、不可以根据位置获取某个元素(没有下标)
        //4、不可以修改某个位置的元素(没有下标)
        //5、不可以删除某个位置的元素(没有下标)
        //6、可以根据传入的对象,删除Set集合中的重复对象
//         set.remove(new Student("zhang3",25,78));
//         System.out.println(set.size());
         
         //7、获取Set集合中的元素,只能使用遍历的方式
         //7-1、for-each循环
//        for(Object obj : set){
//            System.out.println(obj);
//        }
        
        //7-2、集合框架类专用遍历方式---迭代器--Iterator--JDK1.5之前使用
//        Iterator it = set.iterator();
//        while(it.hasNext()){
//            Object obj = it.next();
//            System.out.println(obj);
//        }
        
        /*
         * 探究---HashSet是如何判断两个对象是重复对象的
         * 1、两个对象的equals判断必须返回true
         * 2、两个对象的Hash值必须相等
         * 
         */
        
        HashSet set = new HashSet();
        Student stu1 = new Student("zhang3",18,90);
        Student stu2 = new Student("zhang3",18,90);
        set.add(new Date());
        set.add(stu1);
        set.add(stu2);
        System.out.println(set.size());
        System.out.println(stu1.equals(stu2));
        
        
    }
    
}  

3.Map(映射)
public class TestMap {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         * Map--映射。特点:用键值对的方式保存数据。---数据在Map集合中是成对存放的
         *    ---每个元素除了有值,还有一个唯一的键需要我们定义
         *       
         * 最常用子类---HashMap、Properties
         */
        //首先产生集合对象
        HashMap map = new HashMap(); 
        HashMap<String,Student> stuMap = new HashMap<String, Student>();
        
        //使用集合类对象
        //1、放入元素
        map.put(1, "hello");
        map.put("world", 5);
        map.put("1""helloworld");
        
        stuMap.put("001"new Student("zhang3",18,76));
        //2、得到元素个数
        System.out.println(map.size());
        
        //3、取数据--要根据键获取值
        System.out.println(map.get("2"));
        Student stu = stuMap.get("001");
        System.out.println(stu.getName());
        
        //4、修改元素--仍然调用put方法,只需要放入相同的键
        map.put(1,new Date());
        
        //5、删除元素--调用remove方法,根据键进行删除
        map.remove("1");
        
        /*
         * 在获取元素、删除元素的时候如果传入的键在map中不存在,不会报错!---危险
         * 在修改元素的时候,如果传入的键在map中不存在,就直接变成增加新元素!---危险
         * 解决方案:
         * 利用containsKey方法,可以判断一个map集合中是否包含某个键
         * 也有containersValue方法,判断一个map集合中是否包含某个值
         * 
         * 判断的标准和Set中判断重复对象的方式一样,equals方法和hashCode方法
         */
        
        
        //6、对Map进行遍历
        /*
         * 1、Map不能直接遍历---因为Map里的每一条记录都是一对儿,我们无法用一个变量来装
         * 2、Map只能单独遍历所有的键 或 所有的值
         * 3、统一使用for-each循环进行遍历
         */
        
        Set keySet = map.keySet();//把map中所有的键取出来放到一个Set集合中
        Set<String> stuKeySet = stuMap.keySet();
        
        
        Collection values = map.values();//把map中所有的值取出来放到一个Collection集合中
        Collection<Student> stuValues = stuMap.values();
        
    }
}  

3.Collections工具类

public class TestCollecitons {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         * 常见的max()、min()取一个集合中的最大值和最小值--自己练习
         */
        
        //跟排序有关的方法--只能操作List集合
        List<Student> lst = new ArrayList<Student>();
        lst.add(new Student("zhang3",18,78));
        lst.add(new Student("li4",28,87));
        lst.add(new Student("wang5",22,76));
        lst.add(new Student("zhao6",24,78));
        lst.add(new Student("chen7",18,90));
        
        
        //自然排序--Collections.sort()
        Collections.sort(lst);
        //反转--Collections.reverse()
//        Collections.reverse(lst);
//        混排(随机排放)--Collections.shuffle()--洗牌效果
//        Collections.shuffle(lst);
        //显示结果
        for(String in : lst){
            System.out.println(in);
        }       
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值