目录
4.简述Comparable和Comparator两个接口的区别
1.请简述List接口的特点
- 它是一个元素存取有序的集合。
- 它是一个带有索引的集合,通过索引可以精准的操作集合中的元素。
- 集合中可以有重复的元素,可通过元素的equals方法来比较是否为重复的元素。
2.请简述HashSet去除重复元素的原理
- 首先调用被添加元素的hashCode()方法,与HashSet中已有元素的hashCode比较较是否相同
- 如果不相同,直接存储
- 如果相同,调用equals方法比较是否相同
- 不相同,直接存储元素
- 相同,则认为是同一元素,不存储
3.简述常见的数据结构中元素的存取特点
- 栈:stack,又称堆栈,元素的存取特点为先进后出。
- 队列:queue,简称队,元素的存取特点为先进先出。
- 数组:Array,是有序的元素序列,元素的存取特点为:
1、查找元素快:可直接通过索引快速访问指定位置的元素
2、增删元素慢
- 链表:Linked list,特点为:
1、多个结点之间,通过地址进行连接。
2、查找元素慢
3、增删元素快
4.简述Comparable和Comparator两个接口的区别
- Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
- Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
5.LinkedList使用
已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"}。
将该数组里面的所有qq号都存放在LinkedList中,将list中重复元素删除,将list中所有元素分别用迭代器和增强for循环打印出来。
//定义QQ号码数组
String[] stars =
{"12345","67891","12347809933","98765432102","67891","12347809933"};
LinkedList<String> qqList = new LinkedList();
//遍历stars获取QQ号码
for(String qq : stars){
//如果LinkedList不存在这个元素,则添加
if(!qqList.contains(qq)){
qqList.add(qq);
}
}
//迭代器遍历
Iterator< String> iterator = qqList.iterator();
while (iterator.hasNext()) {
String string = iterator.next();
System.out.println(string);
}
System.out.println("————————————");
//增强for循环遍历
for(Object qq : qqList){
System.out.println(qq);
}
执行结果为:
6.LinkedHashSet的使用
键盘录入一个字符串,去掉其中重复字符,打印出不同的那些字符,必须保证顺序。例如输入:aaaabbbcccddd,打印结果为:abcd。
//创建Scanner对象录入键盘输出的数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = scanner.nextLine();
//创建LinkedHashSet来去除重复的元素,并且保证迭代的顺序
LinkedHashSet<Character> chs = new LinkedHashSet<>();
//将字符串转换为char[]
char[] charArray = s.toCharArray();
//使用增强for循环遍历每个元素,并将字符添加到LinkedHashSet中
for(char c : charArray){
chs.add(c);
}
//使用增强for循环打印
for(char c : chs){
System.out.println(c);
}
执行效果如图:
7.HashSet的使用
双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码不重复)
//生成随机数
Random ran = new Random();
//创建HashSet来存储不重复的红球
HashSet<Integer> hs = new HashSet<>();
//while循环判断红球的数量是否小于6个
while (hs.size() < 6) {
//小于6个则产生一个红球,如果重复,则不添加,再次生成一个号码
int num =ran.nextInt(33) + 1;
hs.add(num);
}
//生成蓝球
int buleBall = ran.nextInt(16) + 1;
//增强for循环输出红球
System.out.println("双色球中奖号码");
System.out.println("红球是:");
for(Integer redBall : hs){
System.out.print(redBall +" ");
}
System.out.println();
System.out.println("蓝球是:" + buleBall);
执行效果如下:
你劝了所有人去休息 直到夜里只剩你自己