• day18-20


     

    容器作业

    一、              填空题

    1. Java集合框架提供了一套性能优良、使用方便的接口和类,包括Collection和Map两大类,它们都位于 ____java.util__ 包中
    2. 队列和堆栈有些相似,不同之处在于 _队列可以先进先出也可以先进后后出,堆栈只能先进后出__。
    3.  ___链表____ 结构是一种由多个节点组成的线性数据结构,并且每个节点包含有数据以及指向下一个节点的引用。
    4. ___LinkedList__是一种集合类,它 采用链表作为的存储结构,便于删除和添加元素,但是按照索引查询元素效率低下。
    5.  ___TreeSet___ 是一种Collection类型的集合类,其中元素唯一,并采用二叉树作为存储结构,元素按照自然顺序排列。
    6. 如果希望将自定义类Student的多个对象放入集合TreeSet,实现所有元素按照某个属性的自然顺序排列,则需要Student类实现___Compara____接口。
    7. 在Java中 ____Map___ 集合的访问时间接近稳定,它是一种键值对映射的数据结构。这个数据结构是通过数组来实现的。
    8. 迭代器Iterator为集合而生,专门实现集合遍历,该接口有三个方法,分别是hasNext() 、____next()___、remove()。

     

    二、              选择题

    1.

    以下选项中关于Java集合的说法错误的是( AC 。(选择二项)

     

     

     

     

    A.

    List接口和Set接口是Collections接口有两个子接口

     

    B.

    List接口中存放的元素具有有序,不唯一的特点

     

    C.

    Set接口中存放的元素具有无序,不唯一的特点

     

    D.

    Map接口存放的是映射信息,每个元素都是一个键值对

     

    2.

    如下Java代码,输出的运行结果是(  A )。(选择一项)

     

    public class Test {

                    public static void main(String[ ] args) {

                                    List<String> list=new ArrayList<String>();

                                    list.add("str1");

                                    list.add(2, "str2");

                                    String s=list.get(1);

                                    System.out.println(s);

                    }

    }

     

     

     

     

    A

    运行时出现异常

     

    B.

    正确运行,输出str1

     

    C.

    正确运行,输出str2

     

    D.

    编译时出现异常

     

    3.

    以下Java代码的作用是首先将一个数组的内容存入集合,然后判断集合中是否有指定的元素存在,其中共有(C )处错误。(选择一项)

     

    import java.util.List;

    public class Test {

                    public int getIndexofArray(float[] f){

                                    int rtn=-1;

                                    float objf=3.4;//1处 3.4f

                                    List list=null;  //2处

                                    for(int i=0;i<f.size( );i++){

                                                    list.add(f[i]);

                                    }

                                    for(int i=0;i<list.size( );i++){

                                                    float tmp=(float)list.get(i);

                                                    if(objf==tmp){

                                                                    rtn=i;

                                                    }

                                    }

                                    return rtn;

                    }             

    }

     

     

     

     

    A

    0

     

    B.

    1

     

    C.

    2

     

    D.

    3

     

    4.

    分析如下Java 代码,编译运行后将输出(  D )。(选择一项)

     

    public class Test {

                    public Test() {

                    }

                    static void print(List<Integer> al) {

                                    al.add(2);

                                    al = new ArrayList<Integer>();

                                    al.add(3);

                                    al.add(4);

                    }

                    public static void main(String[] args) {

                                    List<Integer> al = new ArrayList<Integer>();

                                    al.add(1);

                                    print(al);

                                    System.out.println(al.get(1));

                    }

    }

     

     

     

     

    A

    1

     

    B.

    2

     

    C.

    3

     

    D.

    4

     

    5.

    Java,下列集合类型可以存储无序、不重复的数据的是( D )。(选择一项)

     

     

     

     

    A

    ArrayList

     

    B.

    LinkedList

     

    C.

    TreeSet

     

    D.

    HashSet

     

    6.

    以下代码的执行结果是(  C )。(选择一项)

     

    Set<String> s=new HashSet<String>();

    s.add("abc");

    s.add("abc");

    s.add("abcd");

    s.add("ABC");

    System.out.println(s.size());

     

     

     

     

    A.

    1

     

    B.

    2

     

    C.

    3

     

    D.

    4

     

    7.

    给定如下Java代码,编译运行的结果是( C )。(选择一项)

     

    public class Test {

                    public static void main(String[] args) {

                                    Map<String, String> map = new HashMap<String, String>();

                                    String s = "code";

                                    map.put(s, "1");

                                    map.put(s, "2");

                                    System.out.println(map.size());

                    }

    }

     

     

     

     

    A

    编译时发生错误

     

    B.

    运行时引发异常

     

    C.

    正确运行,输出:1

     

    D.

    正确运行,输出:2

     

    8.

    下面集合类中属于非线程安全,且结构采用了哈希表的是(  C。(选择一项)

     

     

     

     

    A.

    Vector

     

    B.

    ArrayList

     

    C.

    HashMap

     

    D.

    Hashtable

     

    9.

     

    Java中,LinkedList类与ArrayList类同属于集合框架类,下列(CD )选项中是LinkedList类有而ArrayList类没有的方法。(选择两项)

     

     

     

     

    A

    add(Object o)

     

    B.

    add(int index,Object o)

     

    C.

    getFirst()

     

    D.

    removeLast()

           

     

    三、              判断题

    1. 数组和集合中的元素可以是任何数据类型,包括基本类型和引用类型。( T )
    2. Java集合中的Set接口和List接口都是从Collection接口派生出来的。( T)
    3. Collection 接口存储一组不唯一,有序的对象,它有两个子接口:List和Set。( F )
    4. Collection是Java集合顶级接口,其中的元素无序,唯一。Java平台不提供这个接口任何直接的实现。( F )
    5. List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引来访问List中的无素,这类似于Java的数组。(  T )
    6. HashSet采用哈希表存储结构,特点是查询速度快,但是其中元素无序排列。( T )
    7. LinkedHashMap是一种有序的HashMap,查询速度快,便于添加删除操作。( F )
    8. 基本数据类型的值可以被直接存储在Vector对象中。( F  )
    9. Dictionary建立了关键字和值的映射,只要提供一个关键字,Dictionary就会返回一个相应的值。( T  )
    10. 泛型是JavaSE1.7的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。Java语言引入泛型的好处是安全简单。( F)
    11. Collection是专门操作集合的工具类,提供一系列静态方法实现对各种集合操作。( F)
    12. Iterator接口可以遍历任何Collection接口的实现类,可以从一个Collection中使用iterator( )方法来获取迭代器实例。迭代器取代了Java集合框架中的Enumeration。(T)

     

    四、              简答题 (首先熟练掌握笔记上 与集合相关的面试简答题)

    1. 熟练掌握Collection集合和Map集合的体系图
    2. 简述List、Set、Collection、Map的特点和区别及什么时候使用该集合。

    List(存取有序,有索引,可以重复)
         *             ArrayList
         *                 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
         *             LinkedList
         *                 底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢

         *             如果查找和修改多,用ArrayList
         *             如果增和删多,用LinkedList
         *             如果都多,用ArrayList
    Set(存取无序,无索引,不可以重复)
         *             HashSet
         *                 底层是哈希算法实现
         *                 LinkedHashSet
         *                     底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
         *             TreeSet
         *                 底层是二叉树算法实现
         *             一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用 HashSet,HashSet的效率比较高

                                                                            

    Map

                  *                             HashMap

                  *                                             底层是哈希算法,针对键

                  *                                             LinkedHashMap

                  *                                                             底层是链表,针对键

                  *                             TreeMap

                  *                                             底层是二叉树算法,针对键

                  *                             开发中用HashMap比较多

    1. Vector和ArrayList的区别和联系。

          Vector
                      底层是数组实现的,线程安全的,无论增删改查都慢

      ArrayList
                      底层是数组实现的,线程不安全,查找和修改快,增和删比较慢

    1. 请你简述HashMap和Hashtable的区别?
    • Hashtable是JDK1.0版本出现的,是线程安全的,效率低; HashMap是JDK1.2版本出现的,是线程不安全的,效率高
    • Hashtable不可以存储null键和null值; HashMap可以存储null键和null值(目的是为了让后续代码可以继续执行)

     

    五、              编码题 (首先熟练掌握笔记上 与集合相关的需求小案例)

     

    1. 使用List和Map存放多个图书信息,遍历并输出。其中商品属性:编号,名称,单价,出版社;使用商品编号作为Map中的key。
    package com.zuikc.homework;
    
     
    
    import java.util.ArrayList;
    
    import java.util.HashMap;
    
    import java.util.List;
    
     
    
    public class Task1 {
    
     
    
                 public static void main(String[] args) {
    
                                 /*1.        使用List和Map存放多个图书信息,遍历并输出。其中商品属性:
    
                                 编号,名称,单价,出版社;使用商品编号作为Map中的key。*/
    
                                
    
                                 HashMap<Integer, Book> hm = new HashMap<>();
    
                                 hm.put(1, new Book("javase",1000,"zuikc"));
    
                                 hm.put(2, new Book("javaweb",2000,"zuikc"));
    
                                 hm.put(3, new Book("javaee",3000,"zuikc"));
    
                                
    
                                 System.out.println(hm);
    
                 }
    
     
    
    }
    
    public class Book {
    
    //         名称,单价,出版社
    
                 private String name;
    
                 private int price;
    
                 private String press;
    
                 public Book() {
    
                                 super();
    
                                
    
                 }
    
                 public Book(String name, int price, String press) {
    
                                 super();
    
                                 this.name = name;
    
                                 this.price = price;
    
                                 this.press = press;
    
                 }
    
                 public String getName() {
    
                                 return name;
    
                 }
    
                 public void setName(String name) {
    
                                 this.name = name;
    
                 }
    
                 public int getPrice() {
    
                                 return price;
    
                 }
    
                 public void setPrice(int price) {
    
                                 this.price = price;
    
                 }
    
                 public String getPress() {
    
                                 return press;
    
                 }
    
                 @Override
    
                 public String toString() {
    
                                 return "Book [name=" + name + ", price=" + price + ", press=" + press + "]";
    
                 }
    
                 public void setPress(String press) {
    
                                 this.press = press;
    
                 }
    
                 @Override
    
                 public int hashCode() {
    
                                 final int prime = 31;
    
                                 int result = 1;
    
                                 result = prime * result + ((name == null) ? 0 : name.hashCode());
    
                                 result = prime * result + ((press == null) ? 0 : press.hashCode());
    
                                 result = prime * result + price;
    
                                 return result;
    
                 }
    
                 @Override
    
                 public boolean equals(Object obj) {
    
                                 if (this == obj)
    
                                                 return true;
    
                                 if (obj == null)
    
                                                 return false;
    
                                 if (getClass() != obj.getClass())
    
                                                 return false;
    
                                 Book other = (Book) obj;
    
                                 if (name == null) {
    
                                                 if (other.name != null)
    
                                                                 return false;
    
                                 } else if (!name.equals(other.name))
    
                                                 return false;
    
                                 if (press == null) {
    
                                                 if (other.press != null)
    
                                                                 return false;
    
                                 } else if (!press.equals(other.press))
    
                                                 return false;
    
                                 if (price != other.price)
    
                                                 return false;
    
                                 return true;
    
                 }
    
                
    
    }
    1. 使用HashSet和TreeSet存储多个商品信息,遍历并输出;其中商品属性:编号,名称,单价,出版社;要求向其中添加多个相同的商品,验证集合中元素的唯一性。

    提示:向HashSet中添加自定义类的对象信息,需要重写hashCode和equals( )

                  向TreeSet中添加自定义类的对象信息,需要实现Comparable接口,指定比较规则

    package com.zuikc.homework;
    
     
    
    import java.util.HashSet;
    
    import java.util.TreeSet;
    
     
    
    public class Task2 {
    
                 public static void main(String[] args) {
    
             /*2.使用HashSet和TreeSet存储多个商品信息,遍历并输出;其中商品属性:编号,名称,单价,出版社;
    
                  * 要求向其中添加多个相同的商品,验证集合中元素的唯一性。
    
                 提示:向HashSet中添加自定义类的对象信息,需要重写hashCode和equals( )
    
                                 向TreeSet中添加自定义类的对象信息,需要实现Comparable接口,指定比较规则
    
                                  */
    
    //                         demo1();
    
                                 TreeSet<Goods> ts = new TreeSet<>();
    
                                
    
                                 ts.add(new Goods(1, "卫龙", 10, "食品厂"));
    
                                 ts.add(new Goods(1, "卫龙", 10, "食品厂"));
    
                                 ts.add(new Goods(2, "康师傅", 20, "面条厂"));
    
                                 ts.add(new Goods(3, "六神", 16, "化工厂"));
    
                                 ts.add(new Goods(2, "康师傅", 20, "面条厂"));
    
                                
    
                                 for(Goods Goods : ts ) {
    
                                                 System.out.println(Goods);
    
                                 }
    
                 }
    
     
    
                 private static void demo1() {
    
                                 HashSet<Goods> hs = new HashSet<>();
    
                                 hs.add(new Goods(1, "卫龙", 10, "食品厂"));
    
                                 hs.add(new Goods(1, "卫龙", 10, "食品厂"));
    
                                 hs.add(new Goods(2, "康师傅", 20, "面条厂"));
    
                                 hs.add(new Goods(3, "六神", 16, "化工厂"));
    
                                 hs.add(new Goods(2, "康师傅", 20, "面条厂"));
    
                                
    
                                 for(Goods Goods : hs ) {
    
                                                 System.out.println(Goods);
    
                                 }
    
                 }
    
    }
    
    package com.zuikc.homework;
    
     
    
    public class Goods implements Comparable<Goods>{
    
        private int id;
    
        private String name;
    
        private int price;
    
        private String press;
    
        public Goods() {
    
             super();
    
            
    
        }
    
        public Goods(int id, String name, int price, String press) {
    
             super();
    
             this.id = id;
    
             this.name = name;
    
             this.price = price;
    
             this.press = press;
    
        }
    
        public int getId() {
    
             return id;
    
        }
    
        public void setId(int id) {
    
             this.id = id;
    
        }
    
        public String getName() {
    
             return name;
    
        }
    
        public void setName(String name) {
    
             this.name = name;
    
        }
    
        public int getPrice() {
    
             return price;
    
        }
    
        public void setPrice(int price) {
    
             this.price = price;
    
        }
    
        public String getPress() {
    
             return press;
    
        }
    
        public void setPress(String press) {
    
             this.press = press;
    
        }
    
        @Override
    
        public String toString() {
    
             return "Goods [id=" + id + ", name=" + name + ", price=" + price + ", press=" + press + "]";
    
        }
    
        @Override
    
        public int hashCode() {
    
             final int prime = 31;
    
             int result = 1;
    
             result = prime * result + id;
    
             result = prime * result + ((name == null) ? 0 : name.hashCode());
    
             result = prime * result + ((press == null) ? 0 : press.hashCode());
    
             result = prime * result + price;
    
             return result;
    
        }
    
        @Override
    
        public boolean equals(Object obj) {
    
             if (this == obj)
    
                 return true;
    
             if (obj == null)
    
                 return false;
    
             if (getClass() != obj.getClass())
    
                 return false;
    
             Goods other = (Goods) obj;
    
             if (id != other.id)
    
                 return false;
    
             if (name == null) {
    
                 if (other.name != null)
    
                     return false;
    
             } else if (!name.equals(other.name))
    
                 return false;
    
             if (press == null) {
    
                 if (other.press != null)
    
                     return false;
    
             } else if (!press.equals(other.press))
    
                 return false;
    
             if (price != other.price)
    
                 return false;
    
             return true;
    
        }
    
        @Override
    
        public int compareTo(Goods g) {
    
            
    
             return this.id - g.id;
    
        }
    
    }
    1. 实现List和Map数据的转换。具体要求如下:

    功能1:定义方法public void listToMap( ){ }将List中Student元素封装到Map中

    1)        使用构造方法Student(int id,String name,int age,String sex )创建多个学生信息并加入List

    2)        遍历List,输出每个Student信息

    3)        将List中数据放入Map,使用Student的id属性作为key,使用Student对象信息作为value

    4)        遍历Map,输出每个Entry的key和value

    功能2:定义方法public void mapToList( ){ }将Map中Student映射信息封装到List

    1)        创建实体类StudentEntry,可以存储Map中每个Entry的信息

    2)        使用构造方法Student(int id,String name,int age,String sex )创建多个学生信息,并使用Student的id属性作为key,存入Map

    3)        创建List对象,每个元素类型是StudentEntry

    4)        将Map中每个Entry信息放入List对象

    package com.zuikc.homework;
    
     
    
    import java.util.ArrayList;
    
    import java.util.HashMap;
    
    import java.util.List;
    
    import java.util.Map;
    
     
    
    import javax.xml.crypto.dsig.spec.HMACParameterSpec;
    
     
    
    public class Task3 {
    
        public static void main(String[] args) {
    
             ListToMap();
    
        }
    
       
    
        public static void ListToMap() {
    
             List<Student> list = new ArrayList<>();
    
             list.add(new Student(1, "张三", 23, "男"));
    
             list.add(new Student(2, "李四", 24, "女"));
    
             list.add(new Student(3, "王五", 25, "男"));
    
             list.add(new Student(4, "赵六", 26, "女"));
    
            
    
             for (Student Student : list) {
    
             System.out.println(Student);
    
             }
    
            
    
             Map<Integer, Student> map = new HashMap<>();
    
             map.put(1,new Student(1, "张三", 23, "男"));
    
             map.put(2,new Student(2, "李四", 24, "女"));
    
             map.put(3,new Student(3, "王五", 25, "男"));
    
             map.put(4,new Student(4, "赵六", 26, "女"));
    
            
    
             for (Integer key : map.keySet()) {
    
                 System.out.println(key + "=" + map.get(key));
    
             }
    
        }
    
    }
    
    package com.zuikc.homework;
    
     
    
    public class Student {
    
        private int id;
    
        private String name;
    
        private int age;
    
        private String sex;
    
        public Student() {
    
             super();
    
            
    
        }
    
        public Student(int id, String name, int age, String sex) {
    
             super();
    
             this.id = id;
    
             this.name = name;
    
             this.age = age;
    
             this.sex = sex;
    
        }
    
        public int getId() {
    
             return id;
    
        }
    
        public void setId(int id) {
    
             this.id = id;
    
        }
    
        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 String getSex() {
    
             return sex;
    
        }
    
        public void setSex(String sex) {
    
             this.sex = sex;
    
        }
    
        @Override
    
        public String toString() {
    
             return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
    
        }
    
        @Override
    
        public int hashCode() {
    
             final int prime = 31;
    
             int result = 1;
    
             result = prime * result + age;
    
             result = prime * result + id;
    
             result = prime * result + ((name == null) ? 0 : name.hashCode());
    
             result = prime * result + ((sex == null) ? 0 : sex.hashCode());
    
             return result;
    
        }
    
        @Override
    
        public boolean equals(Object obj) {
    
             if (this == obj)
    
                 return true;
    
             if (obj == null)
    
                 return false;
    
             if (getClass() != obj.getClass())
    
                 return false;
    
             Student other = (Student) obj;
    
             if (age != other.age)
    
                 return false;
    
             if (id != other.id)
    
                 return false;
    
             if (name == null) {
    
                 if (other.name != null)
    
                     return false;
    
             } else if (!name.equals(other.name))
    
                 return false;
    
             if (sex == null) {
    
                 if (other.sex != null)
    
                     return false;
    
             } else if (!sex.equals(other.sex))
    
                 return false;
    
             return true;
    
        }
    
       
    
       
    
       
    
    }

     

     

    六、              可选题

    1. 假如有以下email数据“aa@sohu.com,bb@163.com,cc@sina.com,..”现需要把email中的用户部分和邮件地址部分分离,分离后以键值对应的方式放入HashMap?
    2. 由控制台按照固定格式输入学生信息,包括学号,姓名,年龄信息,当输入的内容为exit退出;将输入的学生信息分别封装到一个Student对象中,再将每个Student对象加入到一个集合中,要求集合中的元素按照年龄大小正序排序;最后遍历集合,将集合中学生信息写入到记事本,每个学生数据占单独一行。

    推荐步骤:

    a)        创建Student类,并指定按照年龄正序排列

    b)        通过控制台输入多个不同Student信息。格式规定为:编号#姓名#年龄

    c)         取出字符串中相应信息放入Student对象,并将Student加入到集合中

    d)        遍历集合的过程中将学生的信息输入到记事本

    难点:

    e)        如何指定学生按照年龄正序排列

    f)          如果从字符串“编号#姓名#年龄”中提取学生信息

    g)        放入哪种集合后可以保证学生按照年龄大小正序排列

    h)        如何将集合中学生信息写入记事本,每个学生数据占单独一行

     

  • 相关阅读:
    我cnblogs的主题
    Scala Error: error while loading Suite, Scala signature Suite has wrong version expected: 5.0 found: 4.1 in Suite.class
    Spark之路 --- Scala用JFreeChart画图表实例
    Spark之路 --- Scala IDE Maven配置(使用开源中国的Maven库)和使用
    Spark之路 --- Windows Scala 开发环境安装配置
    epoll函数
    Linux网络编程目录
    函数wait和waitpid
    会话
    进程组
  • 原文地址:https://www.cnblogs.com/houjx/p/9439598.html
Copyright © 2020-2023  润新知