Java面试知识点:集合、Set、泛型、HashSet、HashMap

Java面试知识点:集合、Set、泛型、HashSet、HashMap

答案:

1.集合


集合和数组的对比小结
     1,数组的长度是不可变的,集合的长度是可变的。
     2 ,数组可以存基本数据蟀和引用数据类型。
集合只能存引用数据类型,如野存基本数据类型,需要存对应的包装类。


迭代器小结
• lterator<E> iterator() :创建迭代器对象,默认指向当前集合的0索引。
• boolean hasNext() :判断当前位置是否有元素可以被取出
• E next() :获取当前位置的元素,将迭代器对象移向下一个索引位置
增强for循环
 增强for:简化数组和Collection集合的遍历
 • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器
 •实现Iterable接口的类才可以使用迭代器和增强for

package com.xy;import java.util.ArrayList;
import java.util.Collection;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test01* @Author: 杨路恒* @Description:* @Date: 2021/8/18 0018 10:18* @Version: 1.0*/
public class test01 {public static void main(String[] args) {Collection<String> collection=new ArrayList<>();collection.add("杨大大");System.out.println(collection);collection.add("恒大大");collection.remove("恒大大");System.out.println(collection);collection.removeIf((String s)->{return s.length()<=3;});System.out.println(collection);}
}package com.xy;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test02* @Author: 杨路恒* @Description:* @Date: 2021/8/18 0018 15:41* @Version: 1.0*/
public class test02 {public static void main(String[] args) {Collection<String> collection=new ArrayList<>();collection.add("杨大大");collection.add("恒大大");Iterator<String> iterator=collection.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}for (String s:collection) {System.out.println(s);}}
}package com.xy;import java.util.LinkedList;/*** @ProjectName: day01* @Package: com.xy* @ClassName: test03* @Author: 杨路恒* @Description:* @Date: 2021/8/18 0018 19:18* @Version: 1.0*/
public class test03 {public static void main(String[] args) {LinkedList<String> linkedList=new LinkedList<>();linkedList.add("杨大大");linkedList.add("恒大大");for (int i = 0; i < linkedList.size(); i++) {System.out.println(linkedList.get(i));}linkedList.addFirst("杨");linkedList.addLast("恒");for (String s : linkedList) {System.out.println(s);}System.out.println(linkedList.getFirst());System.out.println(linkedList.getLast());linkedList.remove(0);linkedList.removeFirst();linkedList.removeLast();for (int i = 0; i <linkedList.size() ; i++) {System.out.println(linkedList.get(i));}}
}

2.Set集合


Set集合概述和特点
Set集合特点
•  可以去除重复
•  存取顺序不一致
•  没有带索引的方法,所以不能使用普通for循环遍历,也不能通过获取索引来获取,删除Set集合里面的元素


Set集合练习
•  存储字符串并遍历


public class test04Set集合{public static void main(String[] args) {Set<String> strings=new TreeSet<>();strings.add("杨大大");strings.add("恒大大");Iterator<String> iterator = strings.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}for (String string : strings) {System.out.println(string);}TreeSet<Integer> treeSet=new TreeSet<>();treeSet.add(1);treeSet.add(2);treeSet.add(3);System.out.println(treeSet);}
}


 

代码如下:


public class Student implements Comparable<Student>{private String name;private int age;public Student() {}public Student(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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int compareTo(Student o) {int i = this.age - o.age;i=i==0?this.name.compareTo(o.name):i;return i;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;if (age != student.age) return false;return name != null ? name.equals(student.name) : student.name == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;}
}public class test05Set集合 {public static void main(String[] args) {/*TreeSet<Student> treeSet=new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {//o1表示现在要存入的那个元素//o2表示已经存入到集合中的元素int i = o1.getAge() - o2.getAge();  //主要条件i=i==0?o1.getName().compareTo(o2.getName()):i;  //次要条件return i;}});*/TreeSet<Student> treeSet=new TreeSet<>((Student o1, Student o2)->{int i = o1.getAge() - o2.getAge();  //主要条件i=i==0?o1.getName().compareTo(o2.getName()):i;  //次要条件return i;});treeSet.add(new Student("杨大大",22));treeSet.add(new Student("恒大大",23));treeSet.add(new Student("路大大",23));System.out.println(treeSet);//不实现implements Comparable<Student>会报Exception in// thread "main" java.lang.ClassCastException:// com.xy.Student cannot be cast to java.lang.Comparable}
}

3.泛型
(1)泛型概述
泛型:是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型 它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数
一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?
顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型
这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口

 代码如下:

(1)泛型类:

package com.xy;public class Generic<T>{private T t;public T getT() {return t;}public void setT(T t) {this.t = t;}
}public class test06泛型 {public static void main(String[] args) {TreeSet treeSet=new TreeSet();treeSet.add("杨大大");
//        treeSet.add(6);Generic<String> generic=new Generic<>();generic.setT("杨大大");Generic<Integer> generic1=new Generic<>();generic1.setT(6);System.out.println(generic.getT());System.out.println(generic1.getT());Generic1<Integer> generic11=new Generic1Impl();generic11.show(6);}
}

 

(2)泛型接口


public interface Generic1<T> {void show(T t);
}public class Generic1Impl implements Generic1 {@Overridepublic void show(Object o) {}
}public class test06泛型 {public static void main(String[] args) {TreeSet treeSet=new TreeSet();treeSet.add("杨大大");
//        treeSet.add(6);Generic<String> generic=new Generic<>();generic.setT("杨大大");Generic<Integer> generic1=new Generic<>();generic1.setT(6);System.out.println(generic.getT());System.out.println(generic1.getT());Generic1<Integer> generic11=new Generic1Impl();generic11.show(6);}
}

(3)


public class test07泛型 {public static void main(String[] args) {List<?> list=new ArrayList<Object>();List<?> list1=new ArrayList<Number>();List<?> list2=new ArrayList<Integer>();List<? extends Number> list3=new ArrayList<Number>();List<? extends Integer> list4=new ArrayList<Integer>();List<? super Number> list5=new ArrayList<Number>();List<? super Integer> list6=new ArrayList<Integer>();}
}

 4.HashSet
哈希值
哈希值(哈希码值):是JDK根据对象的地址或者属性值,算出来的int类型的整数
Object类中有一个方法可以获取对象的哈希值
• public int hashCode():根据对象的地址值计算出来的哈希值
对象的哈希值特点
• 如果没有重写hashCode方法,那么是根据对象的地址值计算出的哈希值。同一个对象多次调用hashCode()方法返回的哈希值是相同的不同对象的哈希值是不一样的。
• 如果重写了hashCode方法,一般都是通过对象的属性值计算出哈希值。
        如果不同的对象属性值是一样的,那么计算出来的哈希值也是一样的。


HashSet1.7版本原理总结
     • 底层结构:哈希表。(数组+链表)
     • 数组的长度默认为16,加载因子为0.75
     • 首先会先获取元素的哈希值,计算出在数组中应存入的索引
      判断该索引处是否为null
      如果是null ,直接添加
      如果不是null ,则与链表中所有的元素,通过equals方法比较属性值 只要有一个相同,就不存,如果都不一样,才会存入集合。
HashSet1.8版本原理解析
    底层结构:哈希表。(数组、链表、红黑树的结合体)。
    当挂在下面的元素过多,那么不利于添加,也不利于查询,所以在JDK8以后, 当链表长度超过8的时候,自动转换为红黑树。

代码如下:


public class test09HashSet {public static void main(String[] args) {HashSet<String> hashSet=new HashSet<>();hashSet.add("杨大大");hashSet.add("恒大大");Iterator<String> iterator = hashSet.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}for (String s : hashSet) {System.out.println(s);}}
}public class test10HashSet {public static void main(String[] args) {HashSet<Student> hashSet=new HashSet<>();hashSet.add(new Student("杨大大",22));hashSet.add(new Student("恒大大",23));hashSet.add(new Student("杨大大",22));/*** 结论:*      如果HashSet集合要存储自定义对象,那么必须重写hashCode和equals方法。*/for (Student student : hashSet) {System.out.println(student.hashCode());}}
}

5.HashMap

代码如下:


public class test11HashMap {public static void main(String[] args) {Map<String,String> map=new HashMap<>();map.put("1","杨大大");map.put("2","恒大大");System.out.println(map);System.out.println(map.get("1"));System.out.println(map.size());Set<String> strings = map.keySet();System.out.println(strings);Collection<String> values = map.values();System.out.println(values);for (String s : strings) {System.out.println(map.get(s));}}
}public class test12HashMap {public static void main(String[] args) {Map<String,Student> map=new HashMap<>();map.put("1",new Student("杨大大",22));map.put("2",new Student("恒大大",22));Set<String> keySet = map.keySet();for (String s : keySet) {System.out.println(map.get(s));}Set<Map.Entry<String, Student>> entries = map.entrySet();for (Map.Entry<String, Student> entry : entries) {System.out.println(entry);}}
}public class test13HashMap {public static void main(String[] args) {Map<Student,String> map=new HashMap<>();map.put(new Student("杨大大",22),"西安");map.put(new Student("恒大大",22),"上海");Set<Student> keySet = map.keySet();for (Student s : keySet) {System.out.println(map.get(s));}Set<Map.Entry<Student, String>> entries = map.entrySet();for (Map.Entry<Student, String> entry : entries) {System.out.println(entry);}map.put(new Student("恒大大",22),"上海");}
}public class test14HashMap {public static void main(String[] args) {ArrayList<HashMap<String,String>> array=new ArrayList<>();HashMap<String,String> map=new HashMap<>();map.put("杨大大","22");map.put("恒大大","22");HashMap<String,String> map1=new HashMap<>();map1.put("杨大大","22");map1.put("恒大大","22");array.add(map);array.add(map1);for (HashMap<String, String> hashMap : array) {System.out.println(hashMap);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试知识点:红黑树、Stream流

问题&#xff1a;Java面试知识点&#xff1a;红黑树、Stream流 答案&#xff1a; 1.红黑树 红黑树 • 平衡二叉B树 • 每一个节点可以是红或者黑 • 红黑树不是高度平衡的&#xff0c;它的平衡是通过“自己的红黑规则”进行实现的 2.Stream流 &#xfeff;Stream流的常…

2022年SCI期刊最新影响因子正式发布

来源&#xff1a;高分子科技今日&#xff0c;广大科研人员期待的2022年最新影响因子已正式揭晓。每年的官方影响因子的发布&#xff0c;奖学金、毕业、职称、年终奖、申请国自然……几乎没有不需要它的。今年共有近13000本期刊获得影响因子&#xff0c;其中60%以上的期刊IF实现…

Java面试知识点:File、IO流

问题&#xff1a;Java面试知识点&#xff1a;File、IO流 答案&#xff1a; 1.File listFiles方法注意事项: • 当调用者不存在时&#xff0c;返回null • 当调用者是一个文件时&#xff0c;返回null • 当调用者是一个空文件夹时&#xff0c;返回一体度为0的数组 • 当调用者是…

中国科学家建立可与人脑突触数量相较的AI模型——“八卦炉”

来源&#xff1a;俄罗斯卫星通讯社中国科学家基于最新的一台配备双威处理器的超级计算机&#xff0c;建立了“脑级人工智能模型”——八卦炉&#xff08;BAGUALU&#xff09;。其具有174万亿个参数&#xff0c;可与人脑中的突触数量相媲美&#xff0c;将在从自动驾驶汽车到科学…

Java面试知识点:多线程

问题&#xff1a;Java面试知识点&#xff1a;多线程 答案&#xff1a; 1.线程 代码如下&#xff1a; package com.xy;/*** ProjectName: day01* Package: com.xy* ClassName: test01* Author: 杨路恒* Description:* Date: 2021/8/25 0025 16:57* Version: 1.0*/ public class…

基础科学研究需要哲学滋养

来源&#xff1a;人民网-人民日报 2017年3月28日作者&#xff1a;丘成桐&#xff08;清华大学丘成桐数学科学中心&#xff09;现代科技进步日新月异&#xff0c;不断拓展人类认知和活动的边界&#xff0c;广泛影响社会生产生活的各个方面。比如&#xff0c;高铁、飞机大大方便了…

Java面试知识点:网络编程

问题&#xff1a;Java面试知识点&#xff1a;网络编程 答案&#xff1a; 1.InetAddress 代码如下: package com.xy;import java.net.InetAddress; import java.net.UnknownHostException;/*** ProjectName: day01* Package: com.xy* ClassName: test01* Author: 杨路恒* Des…

游戏+与通用人工智能的实现

算法、算力与场景&#xff0c;是AI研究的关键要素。AI 对数据要求量极大&#xff0c;否则无法达到人类正确识别的程度。自 AlphaGo 一鸣惊人后,越来越多AI 研究团队意识到&#xff0c;游戏是 AI 的绝佳训练场之一。游戏推动科技创新上行一直以来我们很少把活泼轻松的游戏娱乐与…

A Survey on Knowledge Graphs___Representation, Acquisition and Applications.知识图谱综述:表示,获取,应用

知识图谱综述&#xff1a;表示、获取及应用 这是研究生第一篇综述文章&#xff0c;第一次读也是花了好几天的时间。 摘要:人类的知识提供了对世界的一种形式的理解。表征实体之间结构关系的知识图已成为认知和人的智能研究的热门方向。在这个调查中&#xff0c;我们提供了一…

李飞飞划重点的「具身智能」,走到哪一步了?

来源&#xff1a;选自Quanta magazine作者&#xff1a;Allison Whitten编译&#xff1a;机器之心编辑&#xff1a;张倩在前段时间的一篇文章中&#xff0c;李飞飞指出了计算机视觉未来的几个重要方向&#xff0c;其中最重要的一个就是具身智能。她认为&#xff0c;具身智能将成…

基于链接预测和卷积学习的Web服务网络嵌入

Web Service Network Embedding based on Link Prediction and Convolutional Learning 这是我读研的第一篇论文&#xff0c;也是花了好几天的时间。 基于链接预测和卷积学习的Web服务网络嵌入 摘要&#xff1a;为了在许多基本任务中&#xff0c;如基于Web的软件服务聚类、推荐…

芯片光刻路线图

来源&#xff1a;内容来自半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译&#xff1a;SPIE我们所知道的第一个半导体路线图可能是摩尔观察到的&#xff0c;以他为名字的“摩尔定律”预计&#xff0c;芯片的计算能力随着时间的增长呈指数增长。这促使芯片制造…

知识图谱常用指标:MRR、Hits@1、Hits@10、MR

知识图谱常用指标&#xff1a;MRR、Hits1、Hits10、MR 一、MRR MRR的全称是Mean Reciprocal Ranking&#xff0c;其中Reciprocal是指“倒数的”的意思。具体的计算方法如下&#xff1a; 其中是三元组集合&#xff0c;是三元组集合个数&#xff0c;是指第个三元组的链接预测排名…

科学创新四十年,我们可能还没搞明白科学和技术的基本概念

来源&#xff1a;澎湃新闻智库报告栏目撰文&#xff1a;周路明&#xff08;源创力离岸创新中心负责人&#xff0c;深圳市科协原主席&#xff09;中国系统推进科学和技术发展的工作始于改革开放&#xff0c;至今已经40余年。中国官方和民间发展科学和技术的热情在世界范围内都屈…

Python:Tensorflow中两个稀疏张量相乘

Python&#xff1a;Tensorflow中两个稀疏张量相乘 博主在想让两个稀疏张量进行相乘时&#xff0c;发现不能用tf.matmul、tf.sparse_matmul、tf.sparse_tensor_dense_matmul&#xff0c;看来tf内置的没有对两个SparseTensor相乘的函数&#xff0c;于是&#xff0c;我在网上找了相…

超越Yann LeCun:世界模型的学习和推理

来源&#xff1a;CreateAMind节选第二节&#xff0c;约4000字摘要了解大脑中的信息处理并创造通用人工智能是全世界科学家和工程师的长期愿望。人类智能的显着特征是在与包括自我在内的世界的各种互动中的高级认知和控制&#xff0c;这些不是预先定义的&#xff0c;而是随着时间…

有了这个标准,你就知道和你聊天的AI是什么水平了

来源&#xff1a;AI前线编辑&#xff1a;刘燕InfoQ 获悉&#xff0c;6 月 28 日&#xff0c;由清华大学计算机教授、智能技术与系统实验室副主任黄民烈发起&#xff0c;联合了十余家科研机构、二十多位知名学者共同制定的全球首个《AI 对话系统分级定义》&#xff08;以下简称《…

UCL汪军专访:从生命体决策出发,探索智能决策的安全与风险

来源&#xff1a;智源社区整理&#xff1a;沈磊贤编辑&#xff1a;李梦佳导读&#xff1a;我们的日常生活中无时无刻不涉及到决策&#xff0c;如果说感知智能是从观察到发现规律的过程&#xff0c;那么决策智能就是从规律再返回到感知世界&#xff0c;进而改变数据的过程。这样…

课程设计-毕业设计-JAVA画板课程设计---总之岁月漫长,然而值得等待。

在校大学生的一份辛苦劳动成果写了一个小画板程序。 任务书... 1 1.1设计内容... 1 1.2设计任务及具体要求... 1 1.3软件开发运行环境.. 1 2 本组课题... 1 2.1课题... 1 2.2本人任务... 2 3 程序功能简介... 2 1.画板具体功能.. 2 2.功能分析&#xff1a;... 2 …

忆阻器取代晶体管?时间问题!

来源&#xff1a;悦智网1947年&#xff0c;贝尔实验室发明了晶体管&#xff0c;开创了一个电子设备的时代&#xff0c;电子设备比体积庞大、易碎的真空管电子设备更小、运行更冷、功耗更低。晶体管用作二进制开关&#xff0c;以促进电流从关闭状态变为开启状态。收音机、计算器…