美文网首页
JavaSE之集合

JavaSE之集合

作者: 伍陆柒_ | 来源:发表于2019-03-15 17:26 被阅读0次

    集合能保存一组任意类型数据的元素(只能保存引用数据类型,基本数据类型会经过包装类自动包装成对象),并且可以自动扩容,比数组更具优势
    Java中集合由两大接口代表CollectionMap

    Collection接口

    List接口 : 有序(元素存入的顺序和元素在集合当中真实的顺序一致)有重复
    • ArrayList实现类

    ArrayList它是基于数组实现的,内部其实是创建了一个长度为10的Object类型数组,当元素个数超过10,ArrayList会自动扩容到原来的1.5倍
    数组是一种静态线性表,逻辑是连续的,物理也是连续,所以ArrayList它随机查询速度较快,它的插入删除速度慢
    Vector它是基于数组实现的,它与ArrayList它的区别就在于Vector是数据同步的(线程安全)

    List list = new ArrayList();
    // add添加元素
    list.add("hello");
    list.add(false);
    // size元素个数
    System.out.println(list.size());
    // boolean isEmpty 返回true表示size等于0
    System.out.println(list.isEmpty());
    
    • LinkedList实现类

    LinkedList它是基于链表实现的,链表是动态线性表,逻辑是连续的,物理不是连续,所以LinkedList随机查询速度较慢,它的插入删除速度快

    LinkedList list = new LinkedList<>();
    list.add(false);
    list.add(1);
    list.add("hello");
    //拓展
    list.addFirst(12);
    list.addLast("你好");
    list.removeFirst();
    list.removeLast();
    
    Set接口 : 无序(元素存入的顺序和元素在集合当中真实的顺序不一致)无重复
    • HashSet实现类
    Set set = new HashSet<>();
    set.add("hello");
    set.add(1);
    set.add(false);
    
    • TreeSet(使用较少)

    Map接口 : 以键值对的形式保存元素,无序

    • HashMap,数据不同步(线程不安全) null也可以作为key或者value
    Map map = new HashMap<>();
    // 添加元素方法put
    map.put(null, "你好11");
    map.put(2, null);
    map.put(1, "你好1");
    map.put(4, "你好1");
    System.out.println(map.size());
    System.out.println(map.get(2));
    // 返回是否包含某key值或value值
    System.out.println(map.containsKey(1));
    System.out.println(map.containsValue("你好1"));
    

    HashTable,与HashMap相比,数据同步(线程安全),null不可以作为key或者value

    泛型 : 类型参数化

    强行规定集合只存某种类型的数据

    List<String> list1 = new ArrayList<>();
    List<Integer> list2 = new ArrayList<>();
    List<Student> list3 = new ArrayList<>();
            
    Set<String> set1 = new HashSet<>();
    Set<Integer> set2 = new HashSet<>();
    Set<Student> set3 = new HashSet<>();
    
    Map<String, String> map1 = new HashMap<String, String>();
    Map<String, Integer> map2 = new HashMap<String, Integer>();
    Map<String, Student> map3 = new HashMap<String, Student>();
    

    遍历

    List遍历
    public class Demo7 {
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>();
            list.add("A");
            list.add("B");
            list.add("C");
            list.add("D");
            // 1.不推荐
    //      for(int i = 0;i < list.size();i++) {
    //          System.out.println(list.get(i));
    //      }
            
            // 2.迭代器接口 -- 专门用来遍历的
    //      Iterator iter = list.iterator();
    //      while(iter.hasNext()) { // iter.hasNext() 若游标右侧有元素,则返回true
    //          String str = (String)iter.next(); //iter.next()取出游标右侧的元素,并将游标向右移动一位 
    //          System.out.println(str);
    //      }
            
            // 3.强烈推荐
            for(String str : list) {
                System.out.println(str);
            }
        }
    }
    
    Set遍历
    public static void main(String[] args) {
            Set<String> set = new HashSet<>();
            set.add("A");
            set.add("B");
            set.add("C");
            set.add("D");
            // 1.foreach
            for(String str : set) {
                System.out.println(str);
            }
            // 2.迭代器接口 -- 专门用来遍历的
            Iterator iter = set.iterator();
            while(iter.hasNext()) { // iter.hasNext() 若游标右侧有元素,则返回true
                String str = (String)iter.next(); //iter.next()取出游标右侧的元素,并将游标向右移动一位 
                System.out.println(str);
            }
    }
    
    Map遍历
    public class Demo9 {
    
        public static void main(String[] args) {
            Map<String, String> map = new HashMap<String, String>();
            map.put("java1", "good");
            map.put("java2", "very good");
            map.put("java3", "very very good");
            
            // 1.迭代器  
            // keySet()返回map中key值的Set集合
    //      Set<String> set = map.keySet();
            // 遍历key值,利用map的get方法获取value值
    //      Iterator<String> iter = set.iterator();
    //      while(iter.hasNext()) {
    //          String key = iter.next();
    //          System.out.println(key+","+map.get(key));
    //      }
            
            // 2.1 foreach 
    //      for(String key : map.keySet()) {
    //          System.out.println(key+","+map.get(key));
    //      }
            
            // 2.2 Entry遍历 --推荐
            // Entry是Map接口中的内部接口
            // map.entrySet()把map集合中每一组键值对都封装成一个Entry类型的对象存入了一个集合
    //      Set<Entry<String, String>> sets = map.entrySet();
            for(Entry<String, String> entry : map.entrySet()) {
                System.out.println(entry.getKey()+","+entry.getValue());
            }
        }
    }
    

    集合综合练习之学员打卡

    Student.java

    public class Student {
        private int stuid;
        private String name;
        public Student() {}
        public Student(int stuid, String name) {
            super();
            this.stuid = stuid;
            this.name = name;
        }
        public int getStuid() {
            return stuid;
        }
        public void setStuid(int stuid) {
            this.stuid = stuid;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    

    SignInfo.java

    /**
     * 打卡信息类,每一个对象代表了一个打卡记录
     * @author Administrator
     *
     */
    public class SignInfo {
        private int stuid;// 打卡学员的学号
        private Date sign_in;// 签到时间
        private Date sign_out;// 签退时间
        public SignInfo() {}
        public SignInfo(int stuid, Date sign_in, Date sign_out) {
            super();
            this.stuid = stuid;
            this.sign_in = sign_in;
            this.sign_out = sign_out;
        }
        public int getStuid() {
            return stuid;
        }
        public void setStuid(int stuid) {
            this.stuid = stuid;
        }
        public Date getSign_in() {
            return sign_in;
        }
        public void setSign_in(Date sign_in) {
            this.sign_in = sign_in;
        }
        public Date getSign_out() {
            return sign_out;
        }
        public void setSign_out(Date sign_out) {
            this.sign_out = sign_out;
        }
    }
    

    Java2.java

    public class Java2 {
        // 学员名单 -- Java2班中有哪些学员
        private List<Student> stuList = new ArrayList<>();
        // 打卡信息名单
        private Map<String, List<SignInfo>> signMap = new HashMap<>();
        
        public List<Student> getStuList() {
            return stuList;
        }
        public void setStuList(List<Student> stuList) {
            this.stuList = stuList;
        }
        public Map<String, List<SignInfo>> getSignMap() {
            return signMap;
        }
        public void setSignMap(Map<String, List<SignInfo>> signMap) {
            this.signMap = signMap;
        }
        /**
         * 添加学员
         * @param s 要录入班级名单的学员对象
         */
        public void addStu(Student s) {
            if(stuList != null) {
                System.out.println("添加一名新学员成功");
                stuList.add(s);
            }
        }
        /**
         * 根据id查找学员
         * @param stuid 学员的id
         * @return  对应id的学员对象,如果不存在返回null
         */
        public Student findStu(int stuid) {
            if(stuList != null) {
                for(Student stu : stuList) {
                    if(stu.getStuid() == stuid) {
                        return stu;
                    }
                }
            }
            return null;
        }
    }
    

    Test.java


    package com.neuedu.repeat_object;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Test {
        public static void main(String[] args) {
            // 要求在控制台打印出这个字符串中有哪些字符,每个字符出现多少次
            /*
                Map
                    s   1
                    d   10
                    f   33
                    g   2
                    q   5
                    w   3
                    e   1
             */
            String str = "abcdabcdefgabcd发生大幅释放更多符合风格化风格化风格化的";
            char words[] = str.toCharArray();
            Map<Character,Integer> map = new HashMap<>();
            for(char c : words){
                if(map.containsKey(c)){
                    int num = map.get(c);
                    map.put(c,num+1);
                }
                else{
                    map.put(c,1);
                }
            }
            System.out.println(map);
        }
    }
    

    相关文章

      网友评论

          本文标题:JavaSE之集合

          本文链接:https://www.haomeiwen.com/subject/nmsrmqtx.html