hashmap遍历

40个Java集合面试问题和答案

一曲冷凌霜 提交于 2019-12-07 05:08:14
1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。 (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 2.集合框架中的泛型有什么优点? Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。 3.Java集合框架的基础接口有哪些? Collection为集合层级的根接口 。一个集合代表一组对象,这些对象即为它的元素。Java平台不提供这个接口任何直接的实现。

Java基础__Java中集合类

浪子不回头ぞ 提交于 2019-12-05 14:21:21
  ArrayList:有序、可重复、线程不安全、内部使用数组进行存储   LinkedList:有序、可重复、线程不安全、内部使用引用进行存储【可以很方便的进行插入、删除数据】   Vector:有序、可重复、线程安全   HastSet:无序、不可重复(自动去重)      TreeSet存放数据是有序的     HashSet存放数据是无序的 一、ArrayList集合类的简单创建和使用   创建一个集合对象   ArrayList arr = new ArrayList();   往集合中添加数据【arr.add(Object)】 arr.add("小明");   通过索引从集合中取得对象【arr.get(Index)】   arr.get(1) package com.Gary.arryaylist; import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args){ //集合对象 ArrayList arr = new ArrayList(); //往集合中添加对象 arr.add("小明"); arr.add("小红"); arr.add("小梁"); //使用索引添加对象 System.out.println(arr.get(0)); } }

java面试题-Java集合相关

痴心易碎 提交于 2019-12-05 08:29:48
1. ArrayList 和 Vector 的区别    ArrayList和Vector底层实现原理都是一样得,都是使用数组方式存储数据   Vector是线程安全的,但是性能比ArrayList要低。   ArrayList,Vector主要区别为以下几点:    (1):Vector是线程安全的,源码中有很多的synchronized可以看出,而ArrayList不是。导致Vector效率无法和ArrayList相比;   (2):ArrayList和Vector都采用线性连续存储空间,当存储空间不足的时候,ArrayList默认增加为原来的50%,Vector默认增加为原来的一倍;    (3):Vector可以设置capacityIncrement,而ArrayList不可以,从字面理解就是capacity容量,Increment增加,容量增长的参数。 2.说说 ArrayList,Vector, LinkedList 的存储性能和特性    ArrayList采用的数组形式来保存对象,这种方法将对象放在连续的位置中,所以最大的缺点就是插入和删除的时候比较麻烦,查找比较快;   Vector使用了sychronized方法(线程安全),所以在性能上比ArrayList要差些.   LinkedList采用的链表将对象存放在独立的空间中

java常用工具集合

≡放荡痞女 提交于 2019-12-05 03:49:00
1、集合和数组的区别: ①集合中只能存储引用型数据,如果存储基本类型会自动装箱;数组既可以存储基本类型也可以存储引用类型的数据。 ②集合长度不固定,可任意扩充;数组长度固定。 2、Java的集合体系: (1)单列集合 :(顶层是Collection接口) ①List集合 (list是接口,要想使用里面的方法必须创建子类对象) :最常用的子类是ArrayList List集合中元素可重复,有序。通过创建子类对象使用:List list=new ArrayList(); eg:向List集合中添加三个元素并遍历打印 分析:向集合中添加元素的方法:add()、遍历集合的方式:for()、获取集合中元素个数的方法:size() package com.wang.list; import java.util.ArrayList; import java.util.List; /*List是接口,要创建子类对象 使用集合的步骤:创建集合对象-》创建元素对象-》将元素对象添加到集合对象中-》遍历集合 */ public class ListDemo01 { public static void main(String[] args) { //往List集合中添加3个学生对象,然后遍历 //创建集合对象 List list=new ArrayList(); //创建元素对象 Student s1

java中Map遍历的四种方式

别来无恙 提交于 2019-12-05 02:48:45
在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方式去遍历。 方法一:在for循环中使用entries实现Map的遍历(最常用的):   /**   * 最常见也是大多数情况下用的最多的,一般在键值对都需要使用   */   Map <String,String>map = new HashMap<String,String>();     map.put("one", "我是第一名");     for(Map.Entry<String, String> entry : map.entrySet()){       String mapKey = entry.getKey();       String mapValue = entry.getValue();       System.out.println(mapKey+":"+mapValue);     } 方法二:在for循环中遍历key或者values,只需要map中的key或者value时使用,在性能上比使用entrySet较好;   Map <String,String>map = new HashMap<String,String>();     map.put("one", "我是第一名");

java面试题-Java集合相关

匆匆过客 提交于 2019-12-04 23:21:56
1. ArrayList 和 Vector 的区别    ArrayList和Vector底层实现原理都是一样得,都是使用数组方式存储数据   Vector是线程安全的,但是性能比ArrayList要低。   ArrayList,Vector主要区别为以下几点:    (1):Vector是线程安全的,源码中有很多的synchronized可以看出,而ArrayList不是。导致Vector效率无法和ArrayList相比;   (2):ArrayList和Vector都采用线性连续存储空间,当存储空间不足的时候,ArrayList默认增加为原来的50%,Vector默认增加为原来的一倍;    (3):Vector可以设置capacityIncrement,而ArrayList不可以,从字面理解就是capacity容量,Increment增加,容量增长的参数。 2.说说 ArrayList,Vector, LinkedList 的存储性能和特性    ArrayList采用的数组形式来保存对象,这种方法将对象放在连续的位置中,所以最大的缺点就是插入和删除的时候比较麻烦,查找比较快;   Vector使用了sychronized方法(线程安全),所以在性能上比ArrayList要差些.   LinkedList采用的链表将对象存放在独立的空间中

List、Map集合的遍历方式

*爱你&永不变心* 提交于 2019-12-04 20:04:26
List集合类型 /** * java8之前的List遍历方法: */ List<String> list = Arrays.asList("aaaa","bbbb"); //for循环 for (int i=0;i< list.size();i++){ System.out.println(list.get(i)); } //增强for循环 for(String str : list){ System.out.println(str); } //迭代器 Iterator<String> iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } /** * java8的List遍历方法:使用上Lambda表达式 */ list.forEach(str-> System.out.println(str)); Map集合类型: /** * java8之前的Map遍历方法: */ Map<String,String> map = new HashMap<>(); map.put("id","11"); map.put("name","zhangsan"); map.put("age","30"); //entrySet()方法:获取键key和值value

Map集合的四种遍历方式

耗尽温柔 提交于 2019-12-04 08:46:42
import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class TestMap { public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "ab"); map.put(4, "ab"); map.put(4, "ab");// 和上面相同 , 会自己筛选 System.out.println(map.size()); // 第一种: /* * Set<Integer> set = map.keySet(); //得到所有key的集合 * * for (Integer in : set) { String str = map.get(in); * System.out.println(in + " " + str); } */ System.out.println("第一种:通过Map.keySet遍历key和value:"); for (Integer in : map.keySet()) { //map.keySet(

JDK1.7中HashMap底层实现原理

核能气质少年 提交于 2019-12-04 08:11:51
原文链接: https://www.cnblogs.com/dijia478/p/8006713.html 一、数据结构 HashMap中的数据结构是数组+单链表的组合,以键值对(key-value)的形式存储元素的,通过put()和get()方法储存和获取对象。 (方块表示Entry对象,横排表示数组table[],纵排表示哈希桶bucket【实际上是一个由Entry组成的链表,新加入的Entry放在链头,最先加入的放在链尾】,) 二、实现原理 成员变量 源码分析: /** 初始容量,默认16 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** 最大初始容量,2^30 */ static final int MAXIMUM_CAPACITY = 1 << 30; /** 负载因子,默认0.75,负载因子越小,hash冲突机率越低 */ static final float DEFAULT_LOAD_FACTOR = 0.75f; /** 初始化一个Entry的空数组 */ static final Entry<?,?>[] EMPTY_TABLE = {}; /** 将初始化好的空数组赋值给table,table数组是HashMap实际存储数据的地方,并不在EMPTY_TABLE数组中 */

Java 集合框架

南楼画角 提交于 2019-12-03 12:18:50
早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。 虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。 集合框架被设计成要满足以下几个目标。 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。 对一个集合的扩展和适应必须是简单的。 为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList , HashSet , 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。