集合,泛型
一、概念题
-
什么是集合,请列举集合中常用的类和接口?
集合:是一组复合元素 方法。
接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
Collection 接口的子类型有List、Set ,再下面是一些抽象类,最后是具体实现类ArrayList、LinkedList、HashSet、TreeSet等。Map底下有HashMap等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ledQkn8-1615898379860)(D:\Desktop\1.png)]
-
什么是泛型?
泛型:一种不确定的数据类型。泛型的本质是参数化类型,即将所操作的数据类型指定为一个参数;
所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(即、、、等)
-
集合和数组有什么区别?
| 集合: | 数组: |
| :--------------------------: | :----------------------: |
| 可存储不同类型的元素(泛型) | 必须存储相同一类型的元素 |
| 集合的长度可以改变 | 数组的长度固定 | -
了解一下栈结构和队列结构,这两个结构有什么区别?
| 栈结构 | 队列结构 |
| :------------------------------------: | :--------------------: |
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mGiCTSKP-1615898379863)(F:\新思路\JavaEE\考核作业\2.png)] | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RvaVOSi-1615898379864)(D:\Desktop\3.png)] | -
Collection和Collections的有什么区别?
**Collections:**是一个集合框架的帮助类,里面包含一些对集合的排序,搜索以及序列化的操作。
即Collections 是一个包装类;而Collection是一个接口
详见(1.)的图表
二、编程题
-
用for循环遍历ArrayList,用foreach循环遍历LinkedList,用Iterator遍历HashSet(这三个集合里的内容可以自己定义,只要遍历输出即可。)
-
控制台输入数字1~7,程序运行输出对应的星期(星期一至星期日)。
-
定义一个账户类(Account),它包含private成员变量name,id,age,balance(余额),每个属性都要写get,set方法,并重写 toString 方法输出 name, id,age,balance
要求:
创建Account类的 5 个对象,并把这些对象放入 TreeSet 集合中
分别按以下两种方式对集合中的元素进行排序,并遍历输出:
①按balance的大小倒序输出
②按姓名name按字典顺序(a、b、c…)排列输出
1
public static void main(String[] args) {
//创建集合对象
List<String> c = new ArrayList<String>();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
for (int i=0;i<c.size();i++){
String s = c.get(i);
System.out.println(s);
}
}
public static void main(String[] args) {
//创建集合对象
List<String> c = new LinkedList<String>();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
for (String s : c){
System.out.println(s);
}
}
public static void main(String[] args) {
//创建集合对象
Collection<String> c = new HashSet<String>();
//添加元素
c.add("Hello");
c.add("world");
c.add("java");
//采用迭代器的方法遍历
Iterator<String> it = c.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-InXdVdik-1615898379865)(F:\新思路\JavaEE\六1.png)]
-
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("Monday"); list.add("Tuesday"); list.add("Wednesday"); list.add("Thursday"); list.add("Friday"); list.add("Saturday"); list.add("Sunday"); Scanner scanner = new Scanner(System.in); while (scanner.hasNextInt()){ int i = scanner.nextInt(); if (i<1 || i>7) break; System.out.println(list.get(i - 1)); } scanner.close(); }
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LWNoUDEB-1615898379867)(F:\新思路\JavaEE\六2.png)]
-
①按balance的大小倒序输出
Text:
public static void main(String[] args) {
//创建集合对象
TreeSet<Account> s = new TreeSet<>();
//创建测试对象
Account s1 = new Account("ming", 123123, 18, 1_000_000);
Account s2 = new Account("hong", 123125, 17, 1_000_005);
Account s3 = new Account("li", 123124, 16, 1_000_500);
Account s4 = new Account("zhang", 123127, 19, 1_050_000);
Account s5 = new Account("liang", 123126, 18, 100_000);
//添加元素
s.add(s1);
s.add(s2);
s.add(s3);
s.add(s4);
s.add(s5);
//按balance的大小倒序遍历输出
for (Account x : s){
System.out.println(x);
}
}
Account:
public class Account implements Comparable<Account> {
private String name;
private long id;
private int age;
private int balance;
public Account(){
}
public Account(String name,int id,int age,int balance){
this.name = name;
this.id = id;
this.age = age;
this.balance = balance;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public long getId(){
return id;
}
public void setId(long id){
this.id = id;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public int getBalance(){
return balance;
}
public void setBalance(int balance){
this.balance = balance;
}
@Override
public int compareTo(Account s) {
int num1 = s.balance - this.balance ;
int num2 = num1 == 0? s.name.compareTo(this.name):num1;
return num2;
}
@Override
public String toString() {
return getName() + "," +getId() + "," + getAge() + "," + getBalance();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7gS8BnGo-1615898379869)(F:\新思路\JavaEE\六3’.png)]
②按姓名name按字典顺序(a、b、c…)排列输出
Text:
public static void main(String[] args) {
//创建集合对象
TreeSet<Account> s = new TreeSet<>();
//创建测试对象
Account s1 = new Account("ming", 123123, 18, 1_000_000);
Account s2 = new Account("hong", 123125, 17, 1_000_005);
Account s3 = new Account("li", 123124, 16, 1_000_500);
Account s4 = new Account("zhang", 123127, 19, 1_050_000);
Account s5 = new Account("liang", 123126, 18, 100_000);
//添加元素
s.add(s1);
s.add(s2);
s.add(s3);
s.add(s4);
s.add(s5);
//按姓名name按字典顺序(a、b、c…)排列遍历输出
for (Account y : s){
System.out.println(y.toString());
}
}
Account
public class Account implements Comparable<Account> {
private String name;
private long id;
private int age;
private int balance;
public Account(){
}
public Account(String name,int id,int age,int balance){
this.name = name;
this.id = id;
this.age = age;
this.balance = balance;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public long getId(){
return id;
}
public void setId(long id){
this.id = id;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public int getBalance(){
return balance;
}
public void setBalance(int balance){
this.balance = balance;
}
@Override
public int compareTo(Account s) {
int num = this.name.compareTo(s.name);
return num;
}
@Override
public String toString() {
return getName() + "," +getId() + "," + getAge() + "," + getBalance();
}
}
this.balance = balance;
}
@Override
public int compareTo(Account s) {
int num = this.name.compareTo(s.name);
return num;
}
@Override
public String toString() {
return getName() + "," +getId() + "," + getAge() + "," + getBalance();
}
}