集合类

Collection<>

常用方法

Collection<String> c = new ArrayList<String>();
c.add("java");
c.add("hello");
c.add("my");
System.out.println(c); // [java, hello, my]System.out.println(c.size()); // 3c.remove("java");System.out.println(c); // [hello, my]System.out.println(c.contains("java")); // falsec.clear();System.out.println(c); // []

遍历

增强for循环

作用;方便遍历 原理;内置迭代器 推荐:只要遍历的时候推荐使用

/*
格式;
for(元素数据类型 变量名 : 数据或Collection集合){输出变量名即可完成遍历
}
*/
for (String i : l) {System.out.println(i);
}

三种遍历方法

Iterator<Student> it = l.iterator();
while (it.hasNext()) {Student s = it.next();System.out.println(s.getName());
}
for (int i = 0; i < l.size(); i++) {Student s = l.get(i);System.out.println(s.getName());
}
for (Student s : l) {System.out.println(s.getName());
}

List<>

有序,可重复

常用方法

List<String> l = new ArrayList<>();
l.add("add");
l.add("java");
// void add(int index, E element)
l.add(1, "hello");
System.out.println(l); // [add, hello, java]// E remove(int index), E remove(Object o)
l.remove(0);
l.remove("java");
System.out.println(l); // [hello]// E set(int index, E element)
l.set(0, "java");
System.out.println(l); // [java]// E get(int index)
l.get(0); // java
并发修改异常

ConcurrentModificationException

实际修改值和预期修改值不相等

解决方案:用for循环遍历

for (int i = 0; i < l.size(); i++) {String s = l.get(i);System.out.println(s);
}
ArrayList<>

数组

// 用多态创建对象
Collection<String> c = new ArrayList<String>();
c.add("java");
c.add("hello");
System.out.println(c); // [java, hello]
LinkedList<>

链表

LinkedList<String> c = new LinkedList<>();;
c.add("hello");
c.add("world");
c.add("java");
System.out.println(c); // [hello, world, java]c.addFirst("first");
c.addLast("last");
System.out.println(c); // [first, hello, world, java, last]System.out.println(c.getFirst());
System.out.println(c.getLast());
c.removeFirst();
c.removeLast();
System.out.println(c); // [hello, world, java]
ListIterator<>

extends List<>

常用方法:

正向遍历

ListIterator<String> lit = l.listIterator();
while (lit.hasNext()) {String s = lit.next();System.out.println(s);
}

逆向遍历

ListIterator<String> lit = l.listIterator();
while (lit.hasPrevious()) {String s = lit.previous();System.out.println(s);
}

add()不会造成并发修改异常,add方法里让实际操作值和预期的相等

ListIterator<String> lit = l.listIterator();
while (lit.hasNext()) {String s = lit.next();if (s.equals("hello")) {lit.add("world");}
}
System.out.println(l); // [add, java, hello, world]

Set<>

不包含重复元素,没有索引,不能用for循环遍历

Set<String> set = new HashSet<>();
set.add("java");
set.add("hello");
set.add("world");
set.add("java");
for (String s : set) {System.out.println(s);
}
/*输出    HashSet不不保证迭代顺序
java
world
hello
没有出现两个"java"
*/
HashSet<>

为了使HashSet具有元素唯一性,要重写equals()和hashCode()

@Override
public boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;if (age != student.age) return false;return name != null ? name.equals(student.name) : student.name == null;
}@Override
public int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;
}
LinkedHashSet<>

保证迭代的有序性,同时具有唯一性

LinkedHashSet<String> lhs = new LinkedHashSet<>();
lhs.add("hello");
lhs.add("java");
lhs.add("world");
lhs.add("java");for (String s : lhs) {System.out.println(s);
}/*hellojavaworld*/
TreeSet<>

有序:元素按照一定的规则进行排序,有自然排序和比较器排序

没有索引,不能用普通for循环遍历

TreeSet<Integer> t = new TreeSet<>();
t.add(11);
t.add(12);
t.add(9);
t.add(8);
for (Integer i : t) {System.out.println(i);
}
//8
//9
//11
//12

Comparable<>

比较器

public class Student implements Comparable<Student>{@Override
public int compareTo(Object o) {//   return 0; // 只返回第一个//   return 1; // 按序返回 第二个比第一个大//   return -1; // 倒序返回// 按年龄从大到小进行排序int num = this.age - s.age;return num;
}
// this 升前降后 升:从小到大

用TreeSet<>带参构造

TreeSet<Student> t = new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {int num = s1.getAge() - s2.getAge(); // s1 相当于this,s2为上文sreturn num;}
});

一般要有主要条件和次要条件

三元运算符:如num==0?s1.getName().compareTo(s2.getName) : num

上述先判断num是否等于0,true就返回s1.getName().compareTo(s2.getName),false就返回num,而compareTo按字母排序比较字符串

产生十个不重复随机数并遍历

Set<Integer> s = new HashSet<>();
Random r = new Random();while (s.size() < 10) {int i = r.nextInt(20) + 1;s.add(i);
}
for (Integer i :s) {System.out.println(i);
}

Map<>

基本功能

键有唯一性,重复的键就相当于修改的操作

Map<String, String> map = new HashMap<>();
map.put("hello", "java");
map.put("hi", "mysql");
map.put("hello", "navicat");
System.out.println(map); // {hi=mysql, hello=navica}System.out.println(map.size()); // 2map.remove("hello");System.out.println(map); // {hi=mysql}System.out.println(map.containsKey("hi")); // trueSystem.out.println(map.containsValue("mysql")); // truemap.clear();System.out.println(map.isEmpty()); // true

获取功能

Map<String, String> map = new HashMap<>();
map.put("hello", "java");
map.put("hi", "mysql");
map.put("greet", "navicat");System.out.println(map.get("greet")); // navicat
Set<String> ke = map.keySet();
for (String s : ke) {System.out.println(s);
}
/* 获取键的集合
hi
greet
hello
*/
Collection<String> values = map.values();
for (String s1 : values) {System.out.println(s1);
}
/* 获取值的集合
mysql
navicat
java
*/

遍历

// 1.获取键的集合
Set<String> keySet = map.keySet();
// 2.遍历每一个元素
for (String key : keySet) {// 3.根据键找到值String values = map.get(key);System.out.println(key + "," + values);
}
// 1.获取键值对的集合
Set<Map.Entry<String, String>> entrySet = map.entrySet();
// 2.遍历每一个键值对
for (Map.Entry<String, String> my : entrySet) {String key = my.getKey();String value = my.getValue();System.out.println(key + "," + value);
}

案例

1.HashMap<String, Student>案例

public static void main(String[] args) {HashMap<String, Student> hs = new HashMap<>();Student s1 = new Student("你", 10);Student s2 = new Student("它", 11);Student s3 = new Student("他", 15);Student s4 = new Student("我", 42);hs.put("daqi1", s1);hs.put("daqi2", s2);hs.put("daqi3", s3);hs.put("daqi4", s4);Set<String> keySet = hs.keySet();for (String key : keySet) {Student student = hs.get(key);System.out.println(key + "," + student.getName() + "," + student.getAge());}/*daqi3,他,15daqi4,我,42daqi1,你,10daqi2,它,11*/Set<Map.Entry<String, Student>> entrySet = hs.entrySet();for (Map.Entry<String, Student> me : entrySet) {String key = me.getKey();Student value = me.getValue();System.out.println(key + "," + value.getName() + "," + value.getAge());}
}

ps:上述如果将HasMap<…>改为HasMap<Student, String>,为了确保键的唯一性,要重写equals和HasCode方法,用快捷键Alt + Insert快速生成即可

2.嵌套

ArrayList<HashMap<String, String>>

ArrayList<HashMap<String, String>> array = new ArrayList<>();HashMap<String, String> hm1 = new HashMap<>();
hm1.put("java", "mysql");
hm1.put("Navicat", "Tomcat");
array.add(hm1);HashMap<String, String> hm2 = new HashMap<>();
hm1.put("notion", "music");
hm1.put("math", "Chinese");array.add(hm2);for (HashMap<String, String> hm : array) {Set<String> keySet = hm.keySet();for (String key : keySet) {String value = hm.get(key);System.out.println(key + "," + value);}
}

3.统计字符串中每个字符出现的个数

public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入字符串:");String line = sc.nextLine();HashMap<Character, Integer> hm = new HashMap<>();// TreeMap<Character, Integer> tm = new TreeMap<>(); // TreeMap 可以对键进行自然排序// 创建StringBuild来存储字符串StringBuilder sb = new StringBuilder();// 遍历字符串的每一个字符for (int i = 0; i < line.length(); i++) {char key = line.charAt(i);Integer value = hm.get(key);if (value == null) {hm.put(key, 1);} else {value++;hm.put(key, value);}}Set<Character> set = hm.keySet();for (Character key : set) {Integer value = hm.get(key);sb.append(key).append("(").append(value).append(")");}String s = sb.toString();System.out.println(s);}

Collections类

集合操作的工具类,静态方法,直接调用

常用方法

List<Integer> l = new ArrayList<>();
// 添加元素
l.add(10);
l.add(39);
l.add(49);
l.add(100);
l.add(49);Collections.sort(l);
System.out.println(l); // [10, 39, 49, 49, 100]Collections.reverse(l);
System.out.println(l); // [100, 49, 49, 39, 10]Collections.shuffle(l); // 随机排序
System.out.println(l); // [49, 49, 100, 10, 39]

【java基础知识】集合类(含Collection类和Map类)相关推荐

  1. Java基础知识(二十二)常用类三(StringBuffer类)

    目录 一.StringBuffer类 1.概述: 2.线程安全与不安全: 3.StringBuffer的特点: 4.可修改 5.StringBffer与String的区别: 6.StringBuffe ...

  2. Java基础知识——集合类

    工具类:Collection和Map,两者是同一级别的 知识点: expectedModCount ArrayList:懒加载,transient,System.arraycopy() LinkedL ...

  3. Java基础知识回顾之四 ----- 集合List、Map和Set

    前言 在上一篇中回顾了Java的三大特性:封装.继承和多态.本篇则来介绍下集合. 集合介绍 我们在进行Java程序开发的时候,除了最常用的基础数据类型和String对象外,也经常会用到集合相关类. 集 ...

  4. Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

    文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...

  5. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  6. java 反射类 spring_学习Spring必学的Java基础知识(1)----反射

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...

  7. java 基础知识总结

    Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思 ...

  8. java基础知识之加强

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  9. java基础知识总结,javaweb参考资料大全

    Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思 ...

  10. 重拾java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

最新文章

  1. Java项目-Javaweb实现个人博客
  2. 使用okhttp3执行post请求
  3. xfce4面板消失了解决方案+xfce4的面板保存设置以及读取
  4. Spring Security原理与应用
  5. React开发(211):react中refs转发到dom组件
  6. 腾讯TIM自动回复内容怎么自定义添加
  7. 华为员工“削尖脑袋”想进荣耀!网友也可以放心了,荣耀产品售后不受影响...
  8. 从Bezier到NURBS曲线(1) - Bezier曲线
  9. Spring源码下载编译全过程!超详细的步骤!!!
  10. 下载网页 TS视频并自动合成视频
  11. 嵌入式软件开发的特点和流程
  12. python 将url 相对地址转绝对地址
  13. php工作心得简50字,50字简短个人工作总结
  14. Unity SteamVR锁定头盔位置旋转
  15. JVM内存模型和垃圾回收机制
  16. Delphi 2007 体验
  17. Linux Dnsmasq 升级
  18. matlab仿真转速波形为负,转速、电流双闭环直流调速系统的课程设计MATLAB仿真.docx...
  19. 桥梁工程相关c语言程序,桥梁工程监理问题及措施论文
  20. 【Mathematica】 Mathematica 的安装

热门文章

  1. 柔性机器人力控打磨与刚性机器人打磨的主要区别
  2. 当初我要是这么学习JVM就好了「附图文解析」
  3. 欧姆龙e5dc温控器_欧姆龙E5DC-CX2DSM-015用户手册 数字温度控制器手册 - 广州凌控...
  4. 智玩达人李学志老师访谈录
  5. 速记-北斗与galileo频率波长
  6. 物流看板、大数据驾驶舱、物流监控、运输跟踪、车辆运输管控、车辆管理、运单统计、商品流通数据库、配送费、发货件数、行驶耗油、违规管理、告警信息、车队统计、车辆信息查询、运输状态、运输数量、运输进度
  7. cnpm下载安装失败问题解决
  8. 攻防世界pwn新手题wp(通俗易懂)
  9. 计算机辅助药物设计 目录,计算机辅助药物设计(下册)
  10. 【牛客】翻转数列 及 牛客网答题需注意的地方