------<a target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
黑马程序员----java基础HashSet和TreeSet总结
课堂总结:
1. 可变参数1.1 参数类型一样,个数不确定,使用可变参数1.2 格式 类型...变量名,就是数组1.3 注意事项|-- 只能写一个可变参数|-- 写在参数最后
2. Set集合2.1 自身特性|-- 无序|-- 不重复|-- 没有下标2.2 Set接口自己的方法,和父接口Collection一致
案例,Set集合存储自定义对象并迭代器 HashSet
3. HashSet集合3.1 自身特性|-- 底层哈希表结构(链表数组)|-- 存取速度快|-- 线程不安全集合,运行速度快
3.2 如何保证对象唯一性|-- 依靠对象自己的hashCode方法和equals方法
案例:存储自定义对象,去掉姓名和年龄相同的对象面试题:哈希值和equals
4. TreeSet集合4.1 自身特性|-- 底层红黑树|-- 对存储的对象进行自然顺序的排序|-- 线程不安全集合,运行速度快
4.2 TreeSet集合排序方式|-- 对象的自然顺序定义类,实现java.lang.Comparable接口,重写compareTo方法,具备自然顺序
|-- 利用比较器(集合自身具备比较性)将比较器对象,传递到TreeSet集合构造方法中,集合完全利用比较器进行排序实现比较器定义类,实现java.util.Comparator,重写compare方法
案例: 存储自定义对象,采用两种排序形式,迭代器
红黑树存储对象过程
Set练习题:
获取10个1-20之间的随机数package cn.itcast.set;
import java.util.*;
public class SetTest {
public static void main(String[] args) {
test();
}
/*
* 获取10个随机数1-20,不重复
* HashSet实现
*/
public static void test(){
Random r = new Random();
HashSet<Integer> set = new HashSet<Integer>();
while(true){
int number = r.nextInt(20)+1;
set.add(number);
if(set.size()==10)
break;
}
for(Integer i : set){
System.out.println(i);
}
}
}
ArrayList练习题:
键盘录入姓名,年龄并输出
package cn.itcast.list;
/*
* 存储Person对象
* name age 值,采用键盘输入
* 姓名和年龄,一起输入的 abvc 123 切割字符串
*/
import java.util.*;
import cn.itcast.beans.*;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Person> array = new ArrayList<Person>();
Scanner sc = new Scanner(System.in);
//接收输入,两个数据一起写,空格分开,做字符串切割
while(true){
String line = sc.nextLine();
if("over".equals(line))
break;
//按照空格,进行字符串切割
String[] str = line.split(" +");
//数组的每个元素,存储到Person对象,Person存储到集合
array.add(new Person(str[0],Integer.parseInt(str[1])));
}
//迭代集合
Iterator<Person> it = array.iterator();
while(it.hasNext()){
Person p = it.next();
System.out.println(p.getName()+".."+p.getAge());
}
}
}