JavaSE集合练习题

JavaSE集合练习题

简答

1.Collection 和 Collections的区别

解:Collection是集合类的上级接口,继承于他的接口主要有 Set 和 List

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

2.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别

解:Set里的元素是不能重复的,用equals()方法判读两个Set是否相等

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值

3.List, Set, Map是否继承自Collection接口

解:List,Set 继承自 Collection 接口

Map不是继承Collection 接口

4.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对

解:不对,有相同的 hash code

5.说出ArrayList,Vector, LinkedList的存储性能和特性

解:共同点 :三个类都是实现了 List接口,存储数据的特点相同:存储有序的,可重复的数据
    区别: ArrayList :作为 List接口的主要实现类;线程不安全的,效率高;底层使用 Object[] elementData 存储
           LinkedList:对于频繁的插入,删除操作,使用此类效率比 ArrayList高;底层使用双向链表存储
           Vector :作为 List接口的古老实现类;线程安全的,效率低;底层使用 Object[] elementData 存储

6.HashMap和Hashtable的区别

1.HashMap与Hashtable都实现了Map接口。由于HashMap的非线程安全性,效率上可能高于Hashtable。Hashtable的方法是
Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须
为之提供外同步
2. HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
3.HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解
4.Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
5.Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异

7.你所知道的集合类都有哪些?主要方法?

最常用的集合类是 List 和 Map。 
List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 
List 适用于按数值索引访问元素的情形。 
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键""值"),其中每个键映射到一个值

编程

1.定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素,添加另一个集合,删除元素,判断集合中是否包含一个元素,判断是否为空,清除集合,返回集合里元素的个数等常用操作

注:Set接口中没有额外定义新的方法,使用的都是 Collection 中声明的方法

package com.atguigu.com;

import java.util.Collection;
import java.util.HashSet;

public class exer1 {
    public static void main(String[] args) {
        Collection coll1 = new HashSet();
        //1.添加单个元素
        coll1.add(123);
        coll1.add("九十九");
        coll1.add(12.56);


        //2.添加另一个集合
        Collection coll2 = new HashSet();
        coll2.add("coll2");
        coll2.add(false);

        coll1.addAll(coll2);

        //3.删除元素
        coll1.remove(12.56);

        //4.判断集合中是否包含一个元素
        coll1.contains(false);

        //5.判断是否为空
        coll1.isEmpty();

        //6.清除集合
        coll1.clear();

        //7.返回集合里元素的个数
        coll1.size();
    }
}

2.创建Set接口的实现类,添加10个以上的元素,通过Iterator遍历此集合元素

package com.atguigu.com;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class exer2 {
    public static void main(String[] args) {
        Set set = new HashSet();

        //添加元素
        set.add(12);
        set.add(12.4);
        set.add('c');
        set.add(true);
        set.add(false);
        set.add("九十八");
        set.add("学而不思则罔");
        set.add("思而不学则殆");
        set.add("温故而知新");
        set.add("可以为师矣");

        //使用Iterator 遍历此集合
        Iterator iterator = set.iterator();
        //搭配hasNext()和next()方法
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

c
12.4
false
九十八
学而不思则罔
温故而知新
可以为师矣
思而不学则殆
12
true

3.创建Set接口的实现类,添加10个以上的元素,通过foreach遍历此集合元素

package com.atguigu.com;
import java.util.HashSet;

import java.util.Set;
public class exer3 {
    public static void main(String[] args) {
        Set set = new HashSet();

        //添加元素
        set.add(12);
        set.add(12.4);
        set.add('c');
        set.add(true);
        set.add(false);
        set.add("九十八");
        set.add("学而不思则罔");
        set.add("思而不学则殆");
        set.add("温故而知新");
        set.add("可以为师矣");

        //使用foreach来遍历集合
        //for(集合元素的类型 局部变量 : 集合对象){}
        for(Object i : set){
            System.out.println(i);
        }
    }
}

c
12.4
false
九十八
学而不思则罔
温故而知新
可以为师矣
思而不学则殆
12
true

4.创建Set接口的实现类,添加10个以上的元素,要求能够排序

注:向 TreeSet 中添加的数据,要求是相同类的对象

package com.atguigu.com;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class exer4 {
    public static void main(String[] args) {
        //定制排序
        Comparator com = new Comparator() {
            //对字符串进行排序 从大到小
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof String && o2 instanceof String){
                    String str1 = (String)o1;
                    String str2 = (String)o2;
                    return -str1.compareTo(str2);
                }else{
                    throw new RuntimeException("输入数据类型不匹配!");
                }
            }
        };

        TreeSet tree = new TreeSet(com);

        tree.add("abcd");
        tree.add("cdac");
        tree.add("zsdc");

        Iterator iterator = tree.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}
zsdc
cdac
abcd

记录:java 比较器 comparable 和 comparator 需要复习,一调用比较器就犯迷糊

5.定义一个Collection接口类型的变量,引用一个List集合的实现类,实现添加单个元素,添加另一个集合,删除元素,判断集合中是否包含一个元素,判断是否为空,清除集合,返回集合里元素的个数等常用操作

package com.atguigu.com;

import java.util.ArrayList;
import java.util.Collection;

public class exer5 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();

        //1.添加单个元素 可重复
        list.add(123);
        list.add(456);
        list.add(false);
        list.add(456);

        //2.添加另一个集合
        ArrayList list1 = new ArrayList();
        list1.add(12.4);
        list1.add(34.6);

        list.add(list1);//将list1作为一个元素添加到list中
        list.addAll(list1);//将list1中的每个元素迭代添加到list中

        //3.删除元素
        //3.1 按照元素删除
        list.remove(false);
        //3.2按照索引删除
        list.remove(2);

        //4.判断集合中是否包含一个元素
        list.contains(true);

        //5.判断是否为空
        list.isEmpty();

        //6.清除集合
        list.clear();

        //7.返回集合里元素的个数
        list.size();

    }
}

6.创建ArrayList实例化对象,添加10个以上的元素,在2号位插入一个元素,获得5号位元素,删除6号位元素,修改7号位的元素;

package com.atguigu.com;

import java.util.ArrayList;

public class exer6 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();

        //演示 采用for循环迭代添加元素
        for(int i = 0;i < 10;i++){
            list.add(i);
        }

        //在2号位插入一个元素  2号位默认为索引
        list.add(2,"insert");

        //获得5号位元素
        list.get(5);

        //删除6号位元素 idea中可以显示是索引还是元素值
        list.remove(6);

        //修改7号位的元素
        list.set(7,"new");
    }
}

7.通过四种方法遍历上题中的集合

package com.atguigu.com;

import java.util.ArrayList;
import java.util.Iterator;

public class exer7 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();

        //演示 采用for循环迭代添加元素
        for(int i = 0;i < 10;i++){
            list.add(i);
        }

        //在2号位插入一个元素  2号位默认为索引
        list.add(2,"insert");

        //获得5号位元素
        list.get(5);

        //删除6号位元素 idea中可以显示是索引还是元素值
        list.remove(6);

        //修改7号位的元素
        list.set(7,"new");

        //使用iterator 进行遍历
        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.print(iterator.next() + " ");
        }
        System.out.println();
        //使用foreach 进行遍历
        for(Object obj:list){
            System.out.print(obj + " ");
        }
        System.out.println();
        //使用for进行遍历
        for(int i = 0; i < list.size();i++){
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
        //使用Lambda表达式的forEach  之前没用过这种结构
        list.forEach(item -> System.out.print(item + " "));
    }
}
0 1 insert 2 3 4 6 new 8 9 
0 1 insert 2 3 4 6 new 8 9 
0 1 insert 2 3 4 6 new 8 9 
0 1 insert 2 3 4 6 new 8 9 

8.按要求实现下列问题
1)封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题;

2)只提供一个带参数的构造器,实例化对象时,只初始化标题;并且实例化两个对象:
新闻一:中国多地遭雾霾笼罩空气质量再成热议话题
新闻二:春节临近北京“卖房热”

3)将新闻对象添加到ArrayList集合中,并且使用ListIterator倒序遍历;

4)在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前14个,然后在后边加“…”

5)在控制台打印遍历出经过处理的新闻标题;

package com.atguigu.com;

public class News {

    private String title;
    private String content;

    public News(String title){
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "News{" +
                "title='" + title + '\'' +
                '}';
    }
}
package com.atguigu.com;

import java.util.ArrayList;
import java.util.Collection;
import java.util.ListIterator;

public class NewsTest {
    public static void main(String[] args) {
        News n1 = new News("中国多地遭雾霾笼罩空气质量再成热议话题");
        News n2 = new News("春节临近北京\"卖房热\"");

        ArrayList list = new ArrayList();
        list.add(n1);
        list.add(n2);

        ListIterator iterator = list.listIterator();
        //指针位于开头
        while(iterator.hasNext()) {
            //不断循环 将指针位于结尾
            iterator.next();
        }

        //逆向遍历
        while(iterator.hasPrevious()) {
            Object obj = iterator.previous();
            News n = (News) obj;
            String title = n.getTitle();
            if(title.length() > 15){
                System.out.println(title.substring(0,15) + "...");
            }else{
                System.out.println(title);
            }
        }
    }
}

9 定义一个Map接口类型的变量,引用一个实现类,添加键值对,判断集合中是否包含某一key值,通过某一key值得到value值,通过某一key删除键值对,把另一个map集合添加到此map集合,判断是否为空,清除集合,返回集合里元素的个数等常用操作

package com.atguigu.com;

import java.util.HashMap;

public class exer9 {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        //添加键值对
        map.put("AA",123);
        map.put(45,123);
        map.put("BB",56);

        //判断集合中是否包含某一key值
        map.containsKey("CC");

        //通过某一key值得到value值
        map.get("AA");

        //通过某一key删除键值对
        map.remove("BB");

        //把另一个map集合添加到此map集合
        HashMap map1 = new HashMap();
        map1.put("DD",452);
        map1.put("EE",123);

        map.putAll(map1);

        //判断是否为空
        map.isEmpty();

        //清除集合
        map.clear();

        //返回集合里元素的个数
        map.size();
    }
}

10.通过两种方法遍历上题中的map集合

package com.atguigu.com;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class exer10 {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        //添加键值对
        map.put("AA",123);
        map.put(45,123);
        map.put("BB",56);

        //判断集合中是否包含某一key值
        map.containsKey("CC");

        //通过某一key值得到value值
        map.get("AA");

        //通过某一key删除键值对
        map.remove("BB");

        //把另一个map集合添加到此map集合
        HashMap map1 = new HashMap();
        map1.put("DD",452);
        map1.put("EE",123);

        map.putAll(map1);

        //判断是否为空
        map.isEmpty();

        //清除集合
        //map.clear();

        //返回集合里元素的个数
        map.size();

        //遍历集合
        //方式一:entrySet()
        Set entrySet = map.entrySet();
        Iterator iterator = entrySet.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            //entrySet 集合中的元素都是entry
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey() +
                    "----->" + entry.getValue());
        }
        System.out.println("---------------");

        //方式二
        Set keySet = map.keySet();
        Iterator iterator1 = keySet.iterator();
        while (iterator1.hasNext()){
            Object key = iterator1.next();
            Object value = map.get(key);
            System.out.println(key +
                    "----->" + value);
        }
    }
}

11.使用Map接口的实现类完成员工工资(姓名–工资)的摸拟:

1)添加几条信息
2)列出所有的员工姓名
3列出所有员工姓名及其工资
4)删除名叫“Tom”的员工信息
5)输出Jack的工资,并将其工资加1000元(通过取值实现)
6)将所有工资低于1000元的员工的工资上涨20%(通过取值实现)

package com.atguigu.com;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class exer11 {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        //添加数据
        map.put("张三",500);
        map.put("李四",600);
        map.put("Tom",6000);
        map.put("王五",7000);
        map.put("jack",8000);

        //列出所有的员工姓名
        Set nameSet = map.keySet();
        Iterator iterator = nameSet.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }

        System.out.println("***************");
        //列出所有员工姓名及其工资
        Iterator iterator1 = nameSet.iterator();
        while (iterator1.hasNext()){
            Object name = iterator1.next();
            Object salary = map.get(name);
            System.out.println(name +
                    "----->" + salary);
        }

        //删除名叫""Tom"”"的员工信息
        map.remove("Tom");

        //输出Jack的工资,并将其工资加1000元(通过取值实现)
        double salaryJack = (double)map.get("jack");
        System.out.println(salaryJack);
        map.put("jack",salaryJack + 1000);
        
        Set nameSet2 = map.keySet();
        Iterator iterator2 = nameSet2.iterator();
        while(iterator2.hasNext()){
            Object name = iterator2.next();
            double salary = (double)map.get(name);
            if(salary < 1000){
                map.put(name,salary * 1.2);
            }
        }
    }
}

参考文献

链接: B站尚硅谷宋红康Java.

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值