JavaSE之集合

集合能保存一组任意类型数据的元素(只能保存引用数据类型,基本数据类型会经过包装类自动包装成对象),并且可以自动扩容,比数组更具优势
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);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 接下来的几天,博主会总结写对集合的总结。参考文章地址 一、集合(Collection)介绍 1.1为什么需要Col...
    流年划破容颜_cc55阅读 192评论 0 0
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,915评论 0 13
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,412评论 1 14
  • ​ 在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处...
    Java帮帮阅读 1,405评论 0 6
  • 我回家玩几天,因为奶奶家没有什么菜可以吃了,于是带我去镇上买一些菜。 到了镇上我也是知道该买一些什...
    樊诗豪阅读 184评论 1 1