选择题
1.AC
解析:List和Set是collection的子接口,而非collections的子接口
2.A
解析:第二个add超出了范围,故在运行时错误
3.D
解析:ArrayLis和LinkListt是有序的,可重复的;TreeMap是有序的;
4.C
解析:HashSet是不可重复的,故相同的“abc”没有被存储进去,且地址大小是从“1”开始的。
5.C
解析:map.size( )得到的值是从下标0开始的(原因是这里为HashMap),题中存在两个元素,故下标为1
简答题
1.集合和数组的比较?
解答:数组的优势在于查询快,效率比较高,从效率和类型检查的角度来看,数组是最好的。但是在于数组不灵活,需要实现定义,不可以随着需求的扩大而扩容。所以需要一种可以随时改变的容器,集合。集合是在数据的基础上进行的改良。
2.简述List、Set、Map、Collection的区别和联系
解答:List和Set都是Collection的子接口,List和Set的方法近似,且都拥有Collection接口的方法。但是List是指的有序的,可重复的容器,但Set是无序的,不可重复的容器。Map接口是运用二叉树进行存储实现的容器,是有序的,使用键值对进行存储的容器。
3.简述ArrayList和LinkList的区别和联系,他们的底层都是用什么实现的?
解答:ArrayList的查询效率不高,删改程度低,线程不安全;LinkList的查询效率高,删改程度高,线程不安全。ArrayList的底层是由数组来实现,LinkList是由双链表进行实现。
4.HashSet采用了哈希表作为存储结构,请说明哈希表的特点和实现原理?
解答:哈希表的特点——使用了数据和链表结合的方式进行存储数据;
实现原理:
- 首先调用key对象的hashcode()方法,计算得到hashcode值
- 根据hashcode计算出hash值,该处理方法有三种(一)hash值=hashcode/hashcode(二)hash=hashcode%数组长度(三)hash=hashcode&(length-1),采用位运算;不管何种方法,都是将hash值取值范围在【0,length-1】之间
- 生成Entry对象
- 将Entry对象保存在table数组中
总结:首先计算key的hash值,确定插入的位置,但是可能存在同一hash值的元素已经被放置在数组同一位置的情况,这时就将其添加在同一hash值的元素的后面。则在数据中存在了链表。
5.使用泛型有什么好处?
解答:使用泛型遍历集合中,不需要进行数据类型的强制转换。提高了代码的可读性和安全性。
编程题
1.使用List和Map存放多个图书信息,遍历并输出,其中商品包括编号,名称,单价,出版社,使用商品编号作为Map中的key。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Question01 {
public static void main(String aaa[]){
Map<Integer,List<String> > m1 = new HashMap<>();
List<String> l1 = new ArrayList<>();
m1.put(001,addList("hello","100","人民出版社"));
System.out.println(m1);
}
public static List addList(String name,String price,String publish){
List<String> l2 = new ArrayList<>();
l2.add(name);
l2.add(price);
l2.add(publish);
return l2;
}
}
2.使用HashSet和TreeMap进行存储与列一相同的商品信息。
package cn.istell.packge.parctice06;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
/*
对于HashSet,需要对hashCode()和equals()进行重写
对于TreeMap,需要对compareTo()进行重写------这里我也不清楚这三个方法,自卑
需要新建一个泛型
*/
class shop implements Comparable<shop>{
String id;
String name;
String price;
String publish;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getPublish() {
return publish;
}
public void setPublish(String publish) {
this.publish = publish;
}
public shop(String id, String name, String price, String publish){
this.id = id;
this.name = name;
this.price = price;
this.publish = publish;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
shop shop = (shop) o;
return Objects.equals(id, shop.id) &&
Objects.equals(name, shop.name) &&
Objects.equals(price, shop.price) &&
Objects.equals(publish, shop.publish);
}
@Override
public int hashCode() {
return Objects.hash(id, name, price, publish);
}
@Override
public int compareTo(shop o) {
return 0;
}
public String toString(){
return "id="+id+",name="+name+",price="+price+",publish="+publish;
}
}
public class Question02 {
public static void main(String xxp[]){
shop s1 = new shop("001","hello","100","人民出版社");
shop s2 = new shop("001","hello","100","人民出版社");
shop s3 = new shop("001","hello","100","人民出版社");
shop s4 = new shop("001","hello","100","人民出版社");
shop s5 = new shop("001","hello","100","人民出版社");
Set<shop> h1 = new HashSet<>();
h1.add(s1);
h1.add(s2);
h1.add(s3);
h1.add(s4);
h1.add(s5);
System.out.println(h1);
System.out.println("------------------------------------");
Set<shop> t1 = new TreeSet<>();
t1.add(s1);
t1.add(s2);
t1.add(s3);
t1.add(s4);
t1.add(s5);
System.out.println(t1);
}
}
3.实现List和Map数据的转换
package cn.istell.packge.parctice06;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
class Student02{
int id;
String name;
int age;
String 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;
}
public Student02(int id,String name,int age,String sex){
this.id = id;
this.age = age;
this.name = name;
this.sex = sex;
}
//------------------------------封装结束--------------------------
public String toString(){
return "id:"+id+",name:"+name+",age:"+age+",sex:"+sex;
}
}
class StudentListToMap{
HashMap<Integer,Student02> map;
List<Student02> list;
//--------------------------开始封装-------------------------
public HashMap<Integer, Student02> getMap() {
return map;
}
public void setMap(HashMap<Integer, Student02> map) {
this.map = map;
}
public List<Student02> getList() {
return list;
}
public void setList(List<Student02> list) {
this.list = list;
}
//------------------------------构造方法---------------------
public StudentListToMap(List<Student02> list){
this.list = list;
this.map = new HashMap<>();
}
//------------------------------处理方法-------------------
public void listToMap(List<Student02> list){
for(int i = 0; i < list.size();i++){
this.map.put(list.get(i).id,list.get(i));
}
}
public void show(){
for(int i = 0; i < map.size(); i++){
System.out.println(map.get(list.get(i).id));
}
}
}
class StudentMapToList{
HashMap<Integer,Student02> map;
List<Student02> list;
//-----------------封装-------------------
public HashMap<Integer, Student02> getMap() {
return map;
}
public void setMap(HashMap<Integer, Student02> map) {
this.map = map;
}
public List<Student02> getList() {
return list;
}
public void setList(List<Student02> list) {
this.list = list;
}
//-------------------构造方法------------------------------
public StudentMapToList(HashMap<Integer,Student02> map){
this.map = map;
this.list = new ArrayList<Student02>();
}
//---------------------实现方法----------------------------
public void mapToList(List<Student02> list){
for(int i = 0; i < list.size();i++){
this.list.add(map.get(list.get(i).getId()));//获取
}
}
//---------------------------输出数据----------------------------
public void show(){
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
}
}
public class Question03 {
public static void main(String xx[]){
Student02 s1 = new Student02(10,"xx",20,"man");
Student02 s2 = new Student02(20,"xx",20,"man");
Student02 s3 = new Student02(30,"xx",20,"man");
Student02 s4 = new Student02(40,"xx",20,"man");
Student02 s5 = new Student02(50,"xx",20,"man");
List<Student02> list = new ArrayList<>();
//添加数据,通关建立一个list类的实例化对象
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
StudentListToMap temp1 = new StudentListToMap(list);
//进行转换,listToMap中的形式参数为list<Student02>
temp1.listToMap(list);
temp1.show();
System.out.println("----------------------------------");
//直接从StudentListToMap中得到返回值Map类型的对象
StudentMapToList temp2 = new StudentMapToList(temp1.getMap());
temp2.mapToList(list);
temp2.show();
}
}
第三问不熟悉,参考链接:这个怎么设置,点击这里