【容器集合】List集合基础练习

知识点

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 + '\'' +
                '}';
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值