知识点
list集合基础,练习
1.请说明java集合的继承结构图
形式如下: A |\ B C | \ E F.......
2.ArrayList,LinkedList,Vector三者的相同点与不同点?(“Vector”可百度)【面试题】
相同点
三个类都实现了List接口,存储数据的形式特点相同,都是存储可重复的有序的数据。
不同点
ArrayList类主要是实现类,虽然效率高,但是线程不安全。底层用的是Object[]数组存储。从查找的时间复杂度来说它属于O(I)。删除元素的时间复杂度O(n)。
LinkedList类主要是用于频繁插入,删除操作,当然它的效率比ArrayList高,所以它的线程安全程度比ArrayList更低,底层使用的是双向链表存储。从查找的时间复杂度来说属于O(n)。插入删除的时间复杂度属于O(I)。
Vector属于比较古老的一种类,效率比较低,线程比较安全,底层使用的是Object[]数组存储。
3.List 接口的常用方法有哪些?(增、删、改、查、插、长度、遍历等)
void add(int index,E element) 在此集合中的指定位置插入指定的元素
E remove(int index) 删除指定索引处的元素,返回被删除的元素
E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
E get(int index) 返回指定索引处的元素
boolean add(E e) 添加元素
boolean remove(Object o) 从集合中移除指定的元素
void clear() 清空集合中的元素
boolean contains(Object o) 判断集合中是否存在指定的元素
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中元素的个数
4.如何使用Iterator和增强for循环遍历List。举例说明
//迭代器:iterator() iterator iter = list.interator();
//判断集合是否有下一个元素:iter.hasNext() :
while(iter.hasNext()){
String result=(String)iter.next();//取出下一个元素:iter.next();
}
//增强for循环
for(String s : list) {
System.out.println(s); }
5.已知有十六支男子足球队参加2008 北京奥运会。 写一个程序,把这16支球队随机分为4个组。采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
import java.util.*;
public class Demo1 {
public static void main(String[] args) {
List <String> list = new ArrayList<>();
//科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
list.add("科特迪瓦");list.add("阿根廷");list.add("澳大利亚");list.add("塞尔维亚");
list.add("荷兰");list.add("尼日利亚");list.add("日本");list.add("美国");
list.add("中国");list.add("新西兰");list.add("巴西");list.add("比利时");
list.add("韩国");list.add("喀麦隆");list.add("洪都拉斯");list.add("意大利");
List <String> group= new ArrayList<>();
Random random = new Random();
for(int i=0;i<4;i++){//分为4个小组
for (int j=0;j<4;j++){//每个小组4个成员
int a=random.nextInt(list.size());
group.add(list.get(a));
list.remove(a);
}
System.out.println(group);
group.clear();
}
}
6.写一个方法reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如:
List list = new ArrayList();
list.add(“Hello”);
list.add(“World”);
list.add(“Learn”);
//此时list 为Hello World Learn reverseList(list); //调用reverseList 方法之后,list 为Learn World Hello
import java.util.*;
public class Demo1 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("Learn"); //此时list 为Hello World Learn
reverseList(list);
}
//写一个方法reverseList,该函数能够接受一个List,然后把该List 倒序排列
public static void reverseList(List list){
for (int i = list.size() - 1; i >= 0; i--) {
System.out.print(list.get(i)+" ");
}
}
}
7.有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”。 有如下List List list = new ArrayList(); list.add(new Student(“Tom”, 18, 100, “class05”)); list.add(new Student(“Jerry”, 22, 70, “class04”)); list.add(new Student(“Owen”, 25, 90, “class05”)); list.add(new Student(“Jim”, 30,80 , “class05”)); list.add(new Student(“Steve”, 28, 66, “class06”)); list.add(new Student(“Kevin”, 24, 100, “class04”)); 在这个list 的基础上,完成下列要求: //1) 计算所有学生的平均年龄 //2) 计算各个班级的平均分
import java.util.*;
public class Demo1 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student("Tom", 18, 100, "class05"));
list.add(new Student("Jerry", 22, 70, "class04"));
list.add(new Student("Owen", 25, 90, "class05"));
list.add(new Student("Jim", 30,80 , "class05"));
list.add(new Student("Steve", 28, 66, "class06"));
list.add(new Student("Kevin", 24, 100, "class04"));
int nameSum=0;
//遍历集合获取总年龄
for (Student s:list){
nameSum=nameSum+s.getAge();
}
System.out.println("平均年龄为"+nameSum/list.size());
//创建Map集合存放班级名和班级总成绩
Map<String,Integer> m =new HashMap<>();
//创建Map集合存放班级名和班级人数
Map<String,Integer> m1 = new HashMap<String,Integer>();
//遍历list集合,获取总成绩
for(Student s : list){
//获取一个班级名字判断是否在list集合中出现过
String className = s.getClassNum();
if(m.containsKey(className)){
//该班级名已经存在过,需要把总分数和总人数改变
int scoreSum = m.get(className)+s.getScore();
m.put(className, scoreSum);
int stuNum = m1.get(className)+1;
m1.put(className, stuNum);
}else{
//该班级名没有存在,需要向集合中添加新班级
m.put(className, s.getScore());
m1.put(className, 1);
}
}
//遍历集合
for(Map.Entry<String,Integer> ms : m.entrySet()){
String key = ms.getKey();//获取班级名
int stuN = m1.get(key);//获取班级总人数
double avg = ms.getValue()/stuN;//获取平均成绩
System.out.println("平均成绩为:"+key+"-----"+avg);
}
}
}
public class Student {
private String name;
private int age;
private int score;
private String classNum;
public Student(String name, int age, int score, String classNum) {
this.name = name;
this.age = age;
this.score = score;
this.classNum = classNum;
}
public Student() {
}
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;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getClassNum() {
return classNum;
}
public void setClassNum(String classNum) {
this.classNum = classNum;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
", classNum='" + classNum + '\'' +
'}';
}
}