Java 集合常见问题
2017-07-18 09:18
211 查看
1.数组转ArrayList
应采用如下方法
2.数组是否包含特定值
高效代码:
不能采用索引方式(list.remove(i))移除元素,因为size大小会变,解决方法使用迭代器(iterator),代码如下:
4.Hashtable 与 HashMap(哈希表)
a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的。
b)Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,所以会更快。
c)Hashtable 不允许有个空的 key,但是 HashMap 允许出现一个 null key。
5. ArrayList 与 LinkedList
ArrayList 适用于多次随机访问操作,内部实现机制来讲ArrayList是使用Object的数组形式来存储的。
LinkedList (双向链表)适用于场景中有很多add、remove操作,只用少量的随机访问操作
6. Java中数组List数据结构
7.Map遍历
是一个泛型的接口
继承了超级接口Iterable
每个Collection的对象包含了一组对象
所有的实现类都有两个构造方法,一个是无参构造方法,第二个是用另外一个Collection对象作为构造方法的参数
遍历Collection使用Iterator迭代器实现
retainAll(collection),AddAll(),removeAll(c)分别对应了集合的交并差运算
没有具体的直接实现,但提供了更具体的子接口,如Set、List等
是一个接口,继承了接口Collection
List是有序的Collection,能够精确控制插入、获取的位置
和Set接口的最大区别是,List允许重复值,Set不能
它的直接实现类有ArrayList,LinkedList,Vector等
List有自己的迭代器ListIterator,可以通过这个迭代器进行逆序的迭代,以及用迭代器设置元素的值
ArrayList实现了Collection接口
ArrayList是一个顺序表。大小可变。
ArrayList相比LinkedList在查找和修改元素上比较快,但是在添加和删除上比LinkedList慢
ArrayList相比Vector是线程不安全的
LinkedList泛型接口
链表
由于实现了Deque接口,所以它还是一个双端队列
List<String> list = Arrays.asList(arr);Arrays.asList会返回一个ArrayList对象,但是该类是Arrays类中一个私有静态内部类,具有set get contains等方法,不具有add remove方法(size固定)
应采用如下方法
ArrayList<String>list = new ArrayList<String>(Arrays.asList(arr));更加高效的方法:
ArrayList<String> arrayList = new ArrayList<String>(arr.length); Collections.addAll(arrayList, arr);
2.数组是否包含特定值
高效代码:
for(String s: arr){ if(s.equals(targetValue)) return true; } return false;3.在迭代中移除List中元素
不能采用索引方式(list.remove(i))移除元素,因为size大小会变,解决方法使用迭代器(iterator),代码如下:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d")); Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String s = iter.next(); if (s.equals("a")) { iter.remove(); } }next方法必须在remove方法前调用,否则会报ConcurrentModificationException 异常。
4.Hashtable 与 HashMap(哈希表)
a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的。
b)Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,所以会更快。
c)Hashtable 不允许有个空的 key,但是 HashMap 允许出现一个 null key。
5. ArrayList 与 LinkedList
ArrayList 适用于多次随机访问操作,内部实现机制来讲ArrayList是使用Object的数组形式来存储的。
LinkedList (双向链表)适用于场景中有很多add、remove操作,只用少量的随机访问操作
6. Java中数组List数据结构
7.Map遍历
// System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:"); Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Integer, String> entry = it.next(); System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } // 推荐,尤其是容量大时 System.out.println("第三种:通过Map.entrySet遍历key和value"); for (Map.Entry<Integer, String> entry : map.entrySet()) { //Map.entry<Integer,String> 映射项(键-值对) 有几个方法:用上面的名字entry //entry.getKey() ;entry.getValue(); entry.setValue(); //map.entrySet() 返回此映射中包含的映射关系的 Set视图。 System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); }
Collection
是一个泛型的接口继承了超级接口Iterable
每个Collection的对象包含了一组对象
所有的实现类都有两个构造方法,一个是无参构造方法,第二个是用另外一个Collection对象作为构造方法的参数
遍历Collection使用Iterator迭代器实现
retainAll(collection),AddAll(),removeAll(c)分别对应了集合的交并差运算
没有具体的直接实现,但提供了更具体的子接口,如Set、List等
List
是一个接口,继承了接口CollectionList是有序的Collection,能够精确控制插入、获取的位置
和Set接口的最大区别是,List允许重复值,Set不能
它的直接实现类有ArrayList,LinkedList,Vector等
List有自己的迭代器ListIterator,可以通过这个迭代器进行逆序的迭代,以及用迭代器设置元素的值
ArrayList
ArrayList实现了Collection接口ArrayList是一个顺序表。大小可变。
ArrayList相比LinkedList在查找和修改元素上比较快,但是在添加和删除上比LinkedList慢
ArrayList相比Vector是线程不安全的
LinkedList
LinkedList泛型接口链表
由于实现了Deque接口,所以它还是一个双端队列
相关文章推荐
- Java集合的10个最常见问题
- Java程序基础测试 基础笔试、面试常见问题集合
- JAVA基础笔试、面试常见问题集合
- Java集合-----java集合框架常见问题
- 超详细的Java面试题总结之Java集合篇常见问题
- 个人Java常见问题集合
- Java集合-----java集合框架常见问题
- JAVA -- JAVA基础笔试、面试常见问题集合
- JAVA基础笔试、面试常见问题集合
- 【Java集合】JDK1.8源码之ArrayList(详细注释+常见问题)
- java新手——常见的工具问题集合
- Java集合Map常见问题_动力节点Java学院整理
- Java常见问题集锦(来自Sun中国官方站)(转载)
- Java 面试常见问题!
- Java技术与XML常见问题
- 编程必备经典:Java常见问题集锦
- Java常见问题集锦(自Sun中方站)[转]
- java常见问题
- java中的常见问题
- Java和jsp编程中应该注意的几个常见问题