美文网首页
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之集合

    集合能保存一组任意类型数据的元素(只能保存引用数据类型,基本数据类型会经过包装类自动包装成对象),并且可以自动扩容...

  • java集合框架List了解多少

    第1集 编程语⾔⾯试题之新版javase集合框架List基础篇简介:java集合框架⾥⾯List常⻅基础⾯试题考查...

  • Javase-之集合篇

    接下来的几天,博主会总结写对集合的总结。参考文章地址 一、集合(Collection)介绍 1.1为什么需要Col...

  • JavaSE学习之集合框架

    这次发表的东西只当做自己的笔记以备后用 也可以用下面的写法来进行编程 在进行编程的时候集合框架需要重写equals...

  • JavaSE之集合及底层

    基本 常用集合接口和实现类的UML图关系图.png 特点 List接口实现类的特点:有序可重复。 Set接口特点:...

  • JavaSE集合类

    JavaSE集合类 概述 Java中集合类概述Java中数组与集合的比较Java中集合框架层次结构 Collect...

  • JavaSE第17篇:集合之Map集合

    核心概述:本篇我们将会学习JavaSE中的Map集合、可变参数,并且我们会继续完善综合案例之斗地主洗牌发牌功能。同...

  • JavaSE——链表集合

    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互...

  • JavaSE——集合框架

    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互...

  • JavaSE——链表集合

    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互...

网友评论

      本文标题:JavaSE之集合

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