1. 概述
Set | Map |
---|---|
HashSet,LinkedHashSet,TreeSet | HashMap, LinkedHashMap,TreeMap |
2. Set
(1).HashSet
特点:元素唯一,元素无序。
下面分别以String,Integer,自定义类型做例
String
public class demo {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("张曼玉");
set.add("王祖贤");
set.add("钟楚红");
set.add("林青霞");
set.add("杨超越");
set.add("张曼玉");
set.add("王祖贤");
set.add("钟楚红");
set.add("林青霞");
set.add("杨超越");
for (String s : set) {
// System.out.println(set);
System.out.println(s);//set是集合,集合啊
}
}
}
```java
林青霞
杨超越
王祖贤
钟楚红
张曼玉
Integer
```java
public class demo2 {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
set.add(123);
set.add(123);
set.add(1234);
set.add(1234);
set.add(111);
set.add(11);
for (Integer integer : set) {
System.out.println(integer);
}
System.out.println(set);
}
}
1234
123
11
111
[1234, 123, 11, 111]
自定义类型
public class demo3 {
public static void main(String[] args) {
HashSet<Student> student = new HashSet<>();
student.add(new Student("杨",20));
student.add(new Student("桑",20));
student.add(new Student("李",20));
student.add(new Student("李",20));
student.add(new Student("郑",21));
student.add(new Student("明",20));
student.add(new Student("杨",20));
student.add(new Student("桑",20));
student.add(new Student("李",20));
student.add(new Student("李",20));
student.add(new Student("郑",21));
student.add(new Student("明",20));
for (Student student1 : student) {
System.out.println(student1.getName()+"=="+student1.getAge());
}
}
}
```java
桑==20
杨==20
李==20
李==20
明==20
郑==21
(2).LinkedHashSet
特点:元素唯一且有序,是集合
public class demo {
public static void main(String[] args) {
LinkedHashSet<String> set = new LinkedHashSet<>();//唯一且有序,是集合
set.add("杨");
set.add("桑");
set.add("李");
set.add("李");
set.add("郑");
set.add("明");
set.add("杨");
set.add("桑");
set.add("李");
set.add("李");
set.add("郑");
set.add("明");
for (String s : set) {
System.out.println(s);
}
System.out.println(set);
ArrayList<String> strings = new ArrayList<>();
strings.add("杨");
strings.add("李");
strings.add("桑");
strings.add("李");
strings.add("郑");
strings.add("明");
strings.add("杨");
strings.add("李");
strings.add("桑");
strings.add("李");
strings.add("郑");
strings.add("明");
for (String string : strings) {
System.out.println(string);
}
//作用,对list集合去重
LinkedHashSet<String> strings1 = new LinkedHashSet<>(strings);
System.out.println(strings1);
for (String s : strings1) {
System.out.println(s);
}
HashSet<String> strings2 = new HashSet<>(strings);
System.out.println(strings2);
}
}
```java
杨
桑
李
郑
明
[杨, 桑, 李, 郑, 明]
杨
李
桑
李
郑
明
杨
李
桑
李
郑
明
[杨, 李, 桑, 郑, 明]
杨
李
桑
郑
明
[杨, 李, 明, 桑, 郑]
(3).TreeSet
特点:有排序功能,是集合。元素唯一
public class demo {
public static void main(String[] args) {
TreeSet<Integer> i = new TreeSet<>();//有排序功能,是集合。元素唯一。
i.add(18);
i.add(17);
i.add(23);
i.add(22);
i.add(21);
i.add(20);
i.add(19);
i.add(18);
i.add(17);
i.add(23);
for (Integer integer : i) {
System.out.println(integer);
}
System.out.println(i);
}
}
```java
17
18
19
20
21
22
23
[17, 18, 19, 20, 21, 22, 23]
3.Map
(1).HashMap
键值对,map中只和键有关,和值无关,键会进行排序,好像是根据大小进行排序的。
public class demo2 {
public static void main(String[] args) {
HashMap<String, Student> map = new HashMap<>();
map.put("1",new Student("yangkaibo",17));
map.put("22222a",new Student("sangdongjie",18));
map.put("5d",new Student("lizhongjian",17));
map.put("6c",new Student("lizhaoxiang",18));
map.put("3we",new Student("mongjiangyuan",20));
map.put("4f",new Student("zhengwenteng",21));
/* System.out.println(map);
new HashSet<String>().add("abc");*/
System.out.println(map);
}
下面这段代码,通过两种方式遍历输出
方式1:遍历 键找值
方式2:把键值对 对象 统一取出来,再进行输出
public class demo {
public static void main(String[] args) {
HashMap<String, Student> map = new HashMap<>();
map.put("s001", new Student("张三", 23));
map.put("s001", new Student("张三3333", 230));
map.put("s002", new Student("张三", 23));
map.put("s003", new Student("lisi", 29));
map.put("s005", new Student("王五", 28));
map.put("s006", new Student("赵六", 27));
map.put("s007", new Student("田七", 27));
Set<String> strings = map.keySet();
for (String string : strings) {
System.out.println(string+"===="+map.get(string));
}
Set<Map.Entry<String, Student>> entries = map.entrySet();
for (Map.Entry<String, Student> entry : entries) {
String key = entry.getKey();
Student value = entry.getValue();
System.out.println(key+"===="+value);
}
}
}
(2).LinkedHashMap
特点:元素有序 并且唯一
``java
public class demo {
public static void main(String[] args) {
LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("贾乃亮", "李小璐");
map.put("贾乃亮", "李小璐2");
map.put("王宝强", "蓉儿");
map.put("陈羽凡", "白百合");
map.put("王大治", "董洁");
map.put("大朗", "金莲");
map.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String s, String s2) {
System.out.println(s+"=="+s2);
}
});
}
}
```java
贾乃亮==李小璐2
王宝强==蓉儿
陈羽凡==白百合
王大治==董洁
大朗==金莲
(3).TreeMap
特点:可排序且键唯一
下面这段代码重写了Comparator方法,避免了出现同名现象有信息录入不了
Comparator方法利用的返回值为0,1,-1进行排序
public class demo {
public static void main(String[] args) {
TreeMap<Student, String> map = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num = o1.getName().length() - o2.getName().length();
int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
int num3 = num2 == 0 ? o1.getAge() - o2.getAge() : num2;
return num3;
}
});
//键值对 一对一,不会出现重复现象。
map.put(new Student("张三", 23), "s001");
map.put(new Student("张三", 230), "s002");
map.put(new Student("张三", 23), "哈哈哈哈");
map.put(new Student("张三3333", 230), "s001");
map.put(new Student("张三sdfsfsdfs", 23), "呵呵呵呵呵");
map.put(new Student("lisi", 29), "s001");
map.put(new Student("王五sdffffffffffffffffffffffffffffffffff", 28), "s001");
map.put(new Student("赵六ssss", 27), "s001");
map.put(new Student("田七", 27), "s001");
map.forEach(new BiConsumer<Student, String>() {
@Override
public void accept(Student student, String s) {
System.out.println(student.getName()+"---"+student.getAge()+"---"+s);
}
});
}
}
```java
张三---23---哈哈哈哈
张三---230---s002
田七---27---s001
lisi---29---s001
张三3333---230---s001
赵六ssss---27---s001
张三sdfsfsdfs---23---呵呵呵呵呵
王五sdffffffffffffffffffffffffffffffffff---28---s001