二十五、java集合

上课视频:
第一集:链接:https://pan.baidu.com/s/1oMR-dQbI3Tx7ZZZrFmlnpA 密码:1735
第二集: 链接:https://pan.baidu.com/s/1clOWtvLLIX_2bD9DCyDgDQ 密码:41hh
第三集:链接:https://pan.baidu.com/s/1HTsGnbemVYJv8uhv6Iiu4w 密码:1t83

Map说明视频:
链接:https://pan.baidu.com/s/1ywwDXnWI1A7Zd2zJAs1SHw 密码:87ld
链接:https://pan.baidu.com/s/15vZrVKiT6sM5XFZgUEohOQ 密码:7j0o

作业讲解视频:
链接:https://pan.baidu.com/s/1zbuFc4qpvDbAoZ5DU9mdtg 密码:xtsw
链接:https://pan.baidu.com/s/17LPK6tCWs7XBpvjPj1gktQ 密码:apcs

一、java什么是集合。

其实集合跟数组差不多,只不过长度是可以变化的。

集合分为三大类

List : 有序的,可以通过下标访问读取
Map : 无序的,是通过键值对存取
Set :就是一个无序集合。

它们的都实现Collection接口

1.常用集合List:

List-->ArrayList
List-->LinkedList

二、集合当中ArrayList和LinkedList有什么区别。

ArrayList和LinkedList的大致区别如下:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

链表数据结构:


image.png

https://www.cnblogs.com/soundcode/p/6294174.html

二、常用集合Map?

List集合跟Map集合差别在那里。

List:它是跟据下标来进行添加和读取,是有顺序的。
Map:是跟据键值对来添加和读取,key value

HashMap和TreeMap的区别

HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法

默认初始容量16,加载因子0.75,扩容为旧容量乘2,查找元素快,如果key一样则比较value,如果value不一样,则按照链表结构存储value,就是一个key后面有多个value;

TreeMap:基于红黑二叉树的NavigableMap的实现,线程非安全,不允许null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出

上课练习:

练习1:往Map里存10个学生,通过id为8找出对应学生的姓名和性别

Student类

package com.joychen.shuzu;

public class Student {

    private int id;
    private String name;
    private String sex;

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

测试类

package com.joychen.shuzu;


import java.util.HashMap;
import java.util.Map;

public class MapTest {

    public static void main(String args[]){
        Map<Integer,Student> map  = new HashMap<Integer, Student>();

        new Student(2,"aa","");

        map.put(1,new Student(1,"小明","男"));
        map.put(2,new Student(2,"小红","女"));
        map.put(3,new Student(3,"小蓝","男"));
        map.put(4,new Student(4,"小黑","男"));
        map.put(5,new Student(5,"小小","女"));
        map.put(6,new Student(6,"小萌","女"));
        map.put(7,new Student(7,"小李","男"));
        map.put(8,new Student(8,"小猪","男"));
        map.put(9,new Student(9,"小二","男"));
        map.put(10,new Student(10,"小三","女"));

        Student student = map.get(8);
        System.out.println(student.getSex()+student.getName());

    }

    //往Map里存10个学生,通过id为8找出对应学生的姓a名和性别
}

作业思考

作业1:

第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10;

分析:1.看到这个题目,或许你脑海中会想到很多方法,比如判断生成的字符串是否包含重复,在判断长度是不是10,等等.

2.其实这题我们可以培养一个习惯,大问题分解小问题解决.
(1).10个字符串,我们先产生一个10个字符不重复的字符串,

(2).怎么去重复呢?集合中的HashSet就可以,这题不适合用包含方法做,代码复杂

(3).字符组成是由(a-zA-Z0-9) 难道我们在随机他们的码表一一判断吗?-------->可以把们放到一个容器中ArrayList 在集合的随机索引

package com.joychen;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

public class WrokOne {

    static HashSet<String> strings = new HashSet<>();
    static List<String> chars = new ArrayList<>();


    public static void main(String args[]){
        //System.out.println(String.valueOf(9));
        initData();
//        for (int i = 0;i<chars.size();i++){
//            System.out.println(i+":"+chars.get(i));
//        }
      //  System.out.println(chars.size());
        while (strings.size() <10) {
            String s = buildString();
            strings.add(s);
        }

        for (String s :strings){
            System.out.println(s);
        }

    }

    private static void initData(){
        for (char i = 'a';i<='z';i++){
            chars.add(String.valueOf(i));
        }

        for (char i = 'A';i<='Z';i++){
            chars.add(String.valueOf(i));
        }

        for (int i = 0;i<=9;i++){
            chars.add(i+"");
        }
    }

    /**
     * 产生一个字符串
     * @return
     */
    public static String buildString(){
        String tempString = "";
        while (true) {
            int index = (int) (Math.random() * 62);
            String c = chars.get(index);
            if (!tempString.contains(c)){
                tempString= tempString+c;
            }
            if (tempString.length()>=10){
                break;
            }
        }

        return tempString;
    }
}

作业2:

2.集合框架中的泛型有什么优点?
http://www.jfox.info/40-ge-java-ji-he-lei-mian-shi-ti-he-da-an.html

作业3:

从控制台中录入学生信息,包含学号、姓名、性别,用集合保存。保存好的跟据学生姓名去查找此学生的所有信息。然后再打印一下所有学生的信息。

需求分析之后,我们要做成下面这样子

需求

Student类

package com.joychen;

public class Student {
    private String number;
    private String name;
    private String sex;

    public Student() {
    }

    public Student(String number, String name, String sex) {
        this.number = number;
        this.name = name;
        this.sex = sex;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "学号='" + number + '\'' +
                ", 姓名='" + name + '\'' +
                ", 性别='" + sex + '\'' +
                '}';
    }
}

Test类

package com.joychen;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Test {
    public static Scanner scan = new Scanner(System.in);
    static List<Student> students = new ArrayList<>();
    static Map<String,Student> studentMap = new HashMap<>();

    public static void main(String args[]) throws IOException {

//        MyList<Student> stringMyList = new MyList<>();
//        stringMyList.set

        while (true) {
            menu();
            intoSystem();
            //按任意键继续
            System.out.println("按任意键回车继续");
            scan.next();
            //清除屏目
            clear();

        }


    }


    public static void menu() {
        System.out.println("\t\t学生信息查询demo");
        System.out.println("1.录入学生信息");
        System.out.println("2.查询所有学生信息");
        System.out.println("3.跟据学生姓名查所对应学生信息");
        System.out.println("4.退出");
    }

    public static void intoSystem() {
        System.out.println("\n>>请跟据菜单提示选择对应功能:");
        int choose = scan.nextInt();

        switch (choose) {
            case 1:
                inputStudentInfo();

                break;
            case 2:
                findAll();

                break;
            case 3:
                System.out.println("请输入要查找的学生姓名;");
                String name = scan.next();
                getStudentByName(name);
                break;
            case 4:
                System.out.println("4.退出系统");
                System.exit(0);
                break;
            default:
                System.out.println("输入错误,请重新输入");

                break;

        }
    }

    public static void clear() {
        for (int i = 0; i < 20; i++)
            System.out.println("");
    }

    /**
     * 录入学生成绩
     */
    public static void inputStudentInfo() {
        System.out.println("开始录入学生信息,可以输入exit结束录入。");
        int count = 1;
        while (true) {
            System.out.println("请录入第" + count + "个学生信息:");

            System.out.println("录入学号:");
            String number = scan.next();
            if (number.equals("exit")) {
                break;
            }
            System.out.println("录入姓名");
            String name = scan.next();
            if (name.equals("exit")) {
                break;
            }
            System.out.println("录入性别");
            String sex = scan.next();
            if (sex.equals("exit")) {
                break;
            }

            Student student = new Student(number, name, sex);
            students.add(student);
            studentMap.put(name,student);
            count++;
        }


    }

    /**
     * 查询所有学生信息
     */
    public static void findAll() {
        for (Student s : students) {
            System.out.println(s);
        }
    }

    public static void getStudentByName(String name) {
        System.out.println(name+"的信息如下");
        Student s = studentMap.get(name);
        System.out.println(s==null?"查无此人":s);
//        for (Student s : students) {
//            if (s.getName().equals(name)) {
//                System.out.println(s);
//            }
//        }
    }
}

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