• java的集合:List、Set和Map


    虚线是接口,实线是实现类:

    集合能够解决的问题:集合可以丽杰为是一种更高级的数组,可以保存多条数据

    本质:java官方开发人员基于java的一些基础内容(数组等等)创建了一些接口和类,然后使用这些接口和类的对象来更加灵活的保存或处理多条数据。

    Object是一个比较特殊的类型,在Java中有这样的一条设定,Object类是任何类的父类;

    List:有序集合,类似与数组,也是给里面的元素进行了默认的排序,根据时间先后顺序排序的

    用add方法向list里面添加元素,可以添加不同种类的元素

    import java.util.ArrayList;
    import java.util.List;
    
    public class App {
        public static void main(String[] args){
            /**
             * 保存几个学习成绩,99,98,88,89
             */
            //因为list是一个接口,所以右半边不可以写new List();必须写他的实现类
            List list = new ArrayList();    //底层是一个数组     LinkedList底层是一个链表
            list.add(99);
            list.add(89);
            list.add(88);
            list.add(98);
            System.out.println(list);
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
        }
    }

    List和数组的区别:

    1.集合中的数据类型是没有必然的要求的

    2.这个list几个没有长度限制

    ArrayList和LinkedList的区别:

     List的泛形:指定某种类型,list 中只能存放指定的类型,比如下面的一个例子:存放一个Video类型的

    package jihe;
    
    public class Video {
        private String name;
        private String type;
    
        public Video(String name, String type) {
            this.name = name;
            this.type = type;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    }
    package jihe;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class App {
        public static void main(String[] args){
    
            Video video1 = new Video("我不是药神","剧情");
            Video video2 = new Video("风雨咒","动画");
            Video video3 = new Video("延禧攻略","电视剧");
    
            List<Video> list = new ArrayList<Video>();
            list.add(video1);
            list.add(video2);
            list.add(video3);
    
            for(Video video:list){
                System.out.println("名字是:"+video.getName()+",类型是:"+video.getType());
            }
        }
    }

    结果:

    Set集合:无序集合,在放入元素时会有特点的算法为元素进行排序,但是这个算法我们猜测不到,跟先后顺序也无关。因此没有跟List一样的下标去表示里面元素,元素不可重复

     

    package jihe;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class App {
        public static void main(String[] args){
    
            Video video1 = new Video("我不是药神","剧情");
            Video video2 = new Video("风雨咒","动画");
            Video video3 = new Video("延禧攻略","电视剧");
    
            Set<Video> set = new HashSet<Video>();
            set.add(video1);
            set.add(video2);
            set.add(video3);
    
            //循环只能用增强循环,因为无序,没有下标
    
            for(Video video:set){
                System.out.println("名字是:"+video.getName()+",类型是:"+video.getType());
            }
        }
    }

    结果:和上面的list不一样是无序的

    Map集合:功能比较强大,Map是放入键(key)值(value)对的形式放入。

     

    package jihe;
    
    import java.util.*;
    
    public class App {
        public static void main(String[] args){
    
            Video video1 = new Video("我不是药神","剧情");
            Video video2 = new Video("风雨咒","动画");
            Video video3 = new Video("延禧攻略","电视剧");
    
            Map<String,Video> map = new HashMap<>();
            map.put("我不是药神",video1);
            map.put("风雨咒",video2);
            map.put("延禧攻略",video3);
    
            for(String key : map.keySet()){
                System.out.println("名字是:"+map.get(key).getName()+",类型是:"+map.get(key).getType());
            }
        }
    }

    Map的遍历4种方式:

    package jihe;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    
    public class Test {
    
        /**
         *  方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
         */
        public void test(){
            
            Map<Integer, Integer> map = new HashMap<>();
    
            for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
            }
        }
    
    
        /**
         * 方法二 在for-each循环中遍历keys或values,
         *  如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
         *  该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
         */
        public void test1(){
            Map<Integer, Integer> map = new HashMap<>();
            //遍历map中的键
            for (Integer key : map.keySet()) {
                System.out.println("Key = " + key);
            }
            //遍历map中的值
            for (Integer value : map.values()) {
                System.out.println("Value = " + value);
            }
        }
    
        
        /**
         * 方法三使用Iterator遍历,使用泛型:
         */
        public void test2(){
            Map<Integer, Integer> map = new HashMap<>();
            Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
            while (entries.hasNext()) {
                Map.Entry<Integer, Integer> entry = entries.next();
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
            }
        }
    
        
        /**
         * 方法三使用Iterator遍历 ,不使用泛型
         * 你也可以在keySet和values上应用同样的方法。
         *
         * 该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。
         *
         * 从性能方面看,该方法类同于for-each遍历(即方法二)的性能。
         */
        public void test3(){
    
            Map map = new HashMap();
            Iterator entries = map.entrySet().iterator();
            while (entries.hasNext()) {
                Map.Entry entry = (Map.Entry) entries.next();
                Integer key = (Integer)entry.getKey();
                Integer value = (Integer)entry.getValue();
                System.out.println("Key = " + key + ", Value = " + value);
            }
        }
    
    
        /**
         *   方法四、通过键找值遍历(效率低)
         */
        public void test4() {
            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            for (Integer key : map.keySet()) {
                Integer value = map.get(key);
                System.out.println("Key = " + key + ", Value = " + value);
            }
        }
    
    }

    总结

    如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。

  • 相关阅读:
    Droptiles
    10 条建议让你创建更好的 jQuery 插件
    15个值得开发人员关注的jQuery开发技巧和心得
    8 个最好的 jQuery 树形 Tree 插件
    jQuery的发展史,你知道吗?
    20+个可重复使用的jQuery代码片段
    10 款基于 jQuery 的切换效果插件推荐
    关于浏览器事件的思考
    JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)
    Javascript函数声明与函数表达式的区别
  • 原文地址:https://www.cnblogs.com/peiminer/p/10033868.html
Copyright © 2020-2023  润新知