javaList集合练习

前言

       这是我从网上找来的习题,自己看着题目写了点自己认为的答案,有可能不太好,以后有时间再来改正吧。

目录

题目1

  1. 请简述List接口的特点
    • List是一个有序的集合,会把元素添加到指定的位置,允许重复元素添加到集合中。
    • 有两种访问方式,随机访问,也就是用整数的索引来访问,另一个是用迭代器访问。

题目2

  1. 请简述HashSet去除重复元素的原理
    如果要说清楚的话应该是挺复杂的,所以这里不说这么详细,只说一下大概的内容。我是这么理解的,可以分为两部分:
    • 这个使用散列函数来去重的,也就是当HashSet中要添加一个元素的话,会调用这个元素的hashcode方法来获取出哈希值,你也可以这么认为这个是一个地址,如果这个地址上没有元素存在,就可以存了
    • 如果这个有元素存在,那么就调用这个元素的equals方法来比较,比较的内容就是这两个元素的具体内容,如果比较是真的,那么就认为这两个元素是相同元素,就不用存了,这就是去重了。

题目3

  1. 简述常见的数据结构中元素的存取特点(这里主要是关注它们的存取特点)

    • 是一个先进后出的存储特点。先存进去的元素,后取出来。

    • 队列
      是一个先进先出的存储特点。先存进去的元素,先取出来。

    • 数组
      这个是有序的元素序列,可以指定具体的索引来存放元素(不超过指定的容量),在内存上要求是连续的。
      优点就是:
      存进去的比较快,取出来的速度也比较快,
      缺点就是:
      如果要删除和添加到中间时,要移动比较多的元素,很慢,很麻烦,这是劣势

    • 链表
      这个就像是一条锁链那样,需要衔接,在内存上不要求是连续的。
      优点:对于删除和增加元素是比较好的,不需要移动元素,只需要修改其中的存储地址即可。
      缺点:要查找元素的话,要从头查找,如果元素过多,要查很多的时间

题目4

  1. 简述Comparable和Comparator两个接口的区别
  • Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
  • Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

这道题我不太了解,所以这是网上的参考答案

题目5

  1. 根据要求练习LinkedList方法
    (1)基本方法:add, set, get, remove, clear, size等方法;
    (2)特有方法:addFirst, addLast, getFirst, getLast, removeFirst, removeLast, push, pop, clear等方法。
public class Test01 {
    public static void main(String[] args) {
        LinkedList linkedList = new LinkedList();

        linkedList.add("hello");
        System.out.println(linkedList);
        //进行替换
        linkedList.set(0,"world");
        System.out.println(linkedList);
        //取下标为0的元素
        System.out.println(linkedList.get(0));

        System.out.println(linkedList.remove(0));
        linkedList.add("java");
        System.out.println(linkedList);
        linkedList.clear();

        System.out.println(linkedList.size());
        
        linkedList.addFirst("one");
        linkedList.addLast("last");
        System.out.println(linkedList.getFirst());
        System.out.println(linkedList.getLast());
        System.out.println(linkedList.removeFirst());
        System.out.println(linkedList.removeLast());

        linkedList.push("push");
        System.out.println(linkedList.pop());

    }
}

题目6

  1. 定义人类,包含姓名和年龄属性。创建4个人存储到HashSet中,姓名和年龄相同的人看做同一人不存储。

代码如下:

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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 class Test02 {
    public static void main(String[] args) {
        HashSet<Person> hashSet = new HashSet<Person>();
        hashSet.add(new Person("zhangsan",11));
        hashSet.add(new Person("lisi",14));
        hashSet.add(new Person("wangwu",15));
        hashSet.add(new Person("liliu",16));

        for(Person person: hashSet){
            System.out.println(person.getName()+"\t"+person.getAge());
        }
    }
}

题目7

  1. 向list集合添加姓名{张三,李四,王五,二丫,钱六,孙七},将二丫替换为王小丫
    代码如下:
public class Test03 {
    public static void main(String[] args) {
        List list= new ArrayList();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("二丫");
        list.add("钱六");
        list.add("孙七");
		//indexOf方法只能找到第一个二丫的位置
        list.set(list.indexOf("二丫"),"王小丫");
        //打印
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

题目8

  1. 使用LinkedHashSet存储以下元素:“王昭君”,“王昭君”,“西施”,“杨玉环”,“貂蝉”。使用迭代器和增强for循环遍历LinkedHashSet。
public class Test04 {
    public static void main(String[] args) {
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet();
        linkedHashSet.add("王昭君");
        linkedHashSet.add("王昭君");
        linkedHashSet.add("西施");
        linkedHashSet.add("杨玉环");
        linkedHashSet.add("貂蝉");

		//迭代器遍历
        Iterator iterator = linkedHashSet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
		//for增强遍历
        for (String string:linkedHashSet
             ) {
            System.out.println(string);
        }
    }
}

题目9

  1. 九、ArrayList集合中有如下内容: {33,11,77,55},使用Collections.sort()对ArrayList集合中的数据进行排序,并打印出排序后的结果。
public class Test05 {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add(33);
        arrayList.add(11);
        arrayList.add(77);
        arrayList.add(55);

        Collections.sort(arrayList);

        System.out.println(arrayList);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
掌握集合的概念、体系结构、分及使用场景 2)了解Set接口及主要实现HashSet、TreeSet) 3)了解List接口及主要实现(ArrayList、LinkedList、Vector) 4)了解Map接口及主要实现(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person的对象放在一个HashSet姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880003 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880004 注意:因为Person是自定义,需要重写hashCode()方法和equals()方法,并规定只有姓名和身份证号都相等,则对象相等。 其计算哈希码的算法:(31 + ((name == null) ? 0 : name.hashCode()))*31 + id (注:name:Person对象的姓名,id:Person对象的身份证号) 主方法作如下测试: 1)创建一个可放置Person对象的HashSet; 2)依次添加上述5个对象到HashSet; 3)把集合元素打印出来(使用迭代器Iterator) 2、编写程序练习List集合的基本使用: 1) 创建一个只能容纳String对象名为names的ArrayList集合; 2)按顺序往集合添加5个字符串对象:"张三"、"李四"、"王五"、"马六"、"赵"; 3)对集合进行遍历,分别打印集合的每个元素的位置与内容; 4)打印集合的大小,然后删除集合的第3个元素,并显示删除元素的内容,然后再打印目前集合第3个元素的内容,并再次打印集合的大小。 3、编写程序练习Map集合的基本使用: 1)创建一个只能容纳String对象的person的HashMap集合; 2)往集合添加5个"键-值"对象: "id"-"1"; "name"-"张三"; "sex"-"男"; "age"-"25"; "hobby"-"爱学Java" 3)对集合进行遍历,分别打印集合的每个元素的键与值; 4)打印集合的大小,然后删除集合的键为age的元素,并显示删除元素的内容,并再次打印集合的大小。 四、思考题 1、集合List、Set、Map有哪些不同? 2、为什么使用集合框架,而尽可能少用数组作为存储结构? 3、如何使用TreeSet实现第一题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值