Set集合
set接口的使用
package com.ljh.list;
import java.util.HashSet;
import java.util.Set;
/**
* Set接口的使用
* 特点:1.无序,没有下标2.不能重复
*/
public class Demo10 {
public static void main(String[] args) {
//创建集合
Set<String> set = new HashSet<>();
set.add("小米");
set.add("苹果");
set.add("华为");
set.add("锤子");
System.out.println(set.size());
System.out.println(set.toString());
//2.删除数据
set.remove("小米");
//3.遍历
//3.1使用遍历for
//使用迭代器
}
}
package com.ljh.list;
import java.util.HashSet;
/**
* HashSet集合的使用
* 存储结构:哈希表(数组+链表+jdk8红黑树)
* 形象比喻排队买票,多个窗口数组在前,每个窗口多人链表买票
*/
public class Demo11 {
public static void main(String[] args) {
HashSet<String> hashSet = new HashSet<>();
//添加元素
hashSet.add("刘德华");
hashSet.add("梁朝伟");
hashSet.add("凌志林");
hashSet.add("周润发");
//2.删除
hashSet.remove("刘德华");
//遍历for
//遍历迭代器
}
}
hashSet存储
package com.ljh.list;
import java.util.HashSet;
/**
* HashSet集合的使用
* 存储结构:哈希表(数组+链表+jdk8红黑树)
* 形象比喻排队买票,多个窗口数组在前,每个窗口多人链表买票
*
* 存储过程
* (1)根据hashcode计算保存的位置,如果位置为空,则直接保存,如果不为空执行第二步,
* (2)再执行equals方法,如果equals方法为true,则认为是重复,否则形成链表
*/
public class Demo11 {
public static void main(String[] args) {
HashSet<String> hashSet = new HashSet<>();
//添加元素
hashSet.add("刘德华");
hashSet.add("梁朝伟");
hashSet.add("凌志林");
hashSet.add("周润发");
hashSet.add("刘德华");
System.out.println(hashSet.toString());
//2.删除
hashSet.remove("刘德华");
//遍历for
//遍历迭代器
}
}
treeSet
treeSet的使用
package com.ljh.list;
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student o) {
int n1 = this.getName().compareTo(o.getName());
int n2 = this.age-o.getAge();
return n1 == 0?n2:n1;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.ljh.list;
import java.util.TreeSet;
/**
* TreeSet的使用
* 存储结构:红黑树
* 要求:元素必须要实现Comparable接口,compareTo()方法返回0,认为是重复元素
*/
public class Demo12 {
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("abc");
treeSet.add("hijk");
treeSet.add("efg");
treeSet.add("lmd");
treeSet.add("lmd");
System.out.println(treeSet.toString());
//2.删除
treeSet.remove("abc");
//遍历
//增强for
//迭代器
TreeSet<Student> treeSet1 = new TreeSet<>();
Student student = new Student("zs", 20);
Student student1 = new Student("zss", 20);
Student student2 = new Student("zss", 25);
treeSet1.add(student);
treeSet1.add(student1);
treeSet1.add(student2);
for (Student student3 : treeSet1) {
System.out.println(student3.toString());
}
}
}
treeSet
Comparator接口
package com.ljh.list;
import java.util.Comparator;
import java.util.TreeSet;
/**
* TreeSet集合的使用
* Comparator:实现定制比较(比较器)
* Comparable:可比较的
*/
public class Demo13 {
public static void main(String[] args) {
//创建集合
TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int n1 = o1.getAge() - o2.getAge();
int n2 = o1.getName().compareTo(o2.getName());
return 0;
}
});
Student student = new Student("zs", 20);
Student student1 = new Student("zss", 20);
Student student2 = new Student("zss", 25);
students.add(student);
students.add(student1);
students.add(student2);
for (Student student3 : students) {
System.out.println(student3.toString());
}
}
}
Map集合
Map集合的实现类
package com.ljh.list;
import java.util.HashMap;
import java.util.Map;
/**
* HashMap集合的使用
* 存储结构:哈希表(数组+链表+红黑树)
* 使用key可hashCode和equals作为重复
*/
public class Demo14 {
public static void main(String[] args) {
//创建集合
HashMap<Person, String> p = new HashMap<>();
//添加元素
Person s1 = new Person("王", 10);
Person s2 = new Person("li", 10);
Person s3 = new Person("zeng", 10);
p.put(s1,"北京");
p.put(s2,"上海");
p.put(s3,"广州");
p.put(new Person("zeng", 10),"广州");
System.out.println(p.size());
System.out.println(p.toString());
//删除
p.remove(s1);
System.out.println(p.size());
//3遍历
//使用keySet()
for (Person person : p.keySet()) {
System.out.println(p.get(person));
}
//使用entrySet()
for (Map.Entry<Person, String> personStringEntry : p.entrySet()) {
System.out.println(personStringEntry.getValue());
}
//判断
System.out.println(p.containsKey(s2));
System.out.println(p.containsValue("广州"));
}
}
hashMap源码分析
Hashtable
TreeMap
TreeMap也和TreeSet一样需要comparable或者Comparator的比较,不同点在于它的比较对象如:name,那么对象的name就是作为唯一比较的key,相同的name就会取一个
Collections工具类
package com.ljh.list;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Demo15 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(20);
list.add(5);
list.add(12);
list.add(22);
list.add(11);
list.add(24);
//sort排序
System.out.println(list.toString());
Collections.sort(list);
System.out.println(list.toString());
//binarySearch二分查找
List<Integer> objects = new ArrayList<>();
int i = Collections.binarySearch(list, 13);
System.out.println(i);
//copy复制
List<Integer> dest = new ArrayList<>();
for (int j = 0; j < list.size(); j++) {
dest.add(0);
}
Collections.copy(dest,list);
System.out.println(dest.toString());
//reverse反转
Collections.reverse(list);
System.out.println(list);
//shuffle 打乱
Collections.shuffle(list);
System.out.println(list.toString());
//list转数组
Integer[] arry = list.toArray(new Integer[0]);
System.out.println(Arrays.toString(arry));
//数组转成集合
String[] names = {"zhang","wang","li"};
//集合是一个受限集合,不能添加和删除
List<String> list1 = Arrays.asList(names);
System.out.println(list1);
Integer[] nums = {100,200,300};
List<Integer> list2 = Arrays.asList(nums);
System.out.println(list2);
}
}