1、Collection 接口和 Collections 类都是做什么用的 ?
Collection接口和 Collections 类都在Java.util包下,前者是接口,后者是类。 1. Java.util.Collection是集合类的顶级接口。它提供对集合对象进行基本操作的通用 接口方法。它直接继承接口有List,Set,Queue。2. Java.util.Collections是一个包装类。此类完全由在collection上进行操作或返回collection的静态方法组成。它不能被实例化,起到一个工具类的作用。
2、Collection 接口有几个子接口 ?Map 接口有父接口么 ?
collection有三个子接口,分别是List、Set和Queue。
没有
3、List 、 Set 、 Map 三个接口有什么特点 ?
List、Set是存储单列的数据集合,都继承与collection接口。
Map是存储键值对这样的双列数据的集合,是个独立接口。
List中存储的数据是有序的,可以是重复的。
Set中存储的数据是无序的,且不允许重复。
Map中存储的数据是无序的,他的键是不允许重复的,值是可以重复的。
4、请简述哈希表(散列表)
散列表(也叫哈希表),是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做三列函数,存放记录的数组叫做散列表。
5、以下哪个集合接口支持通过字符串主键检索对象 A
A.Map
B.Set
C.List
D.Collection
6、以下哪些语句用于创建一个Map实例?D
A.Map m = new Map();
B.Map m = new Map(init capacity,increment capacity);
C.Map m = new Map(new Collection());
D.以上均不行
7、以下代码的执行结果是?
public class Example {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "def";
String s3 = "def";
List<String> list = new ArrayList<String>();
list.add(s1);
list.add(s2);
list.add(s3);
for (String string : list) {
System.out.println( string );
}
System.out.println("-------------------");
Set<String> set = new HashSet<>();
set.add(s1);
set.add(s2);
set.add(s3);
for (String string : set) {
System.out.println( string );
}
}
}
abc
def
def
abc
def
8、以下代码执行结果是?TreeMap和 HashMap 的区别是什么 ?
public class Example {
public static void main(String[] args) {
TreeMap<String, String> map = new TreeMap<String, String>();
map.put("one", "1");
map.put("two", "2");
map.put("three", "3");
displayMap(map);
}
static void displayMap(TreeMap map) {
Collection<String> c = map.entrySet();
Iterator<String> i = c.iterator();
while (i.hasNext()) {
Object o = i.next();
System.out.print(o.toString());
}
}
}
执行结果:one=1three=3two=2
TreeMap和 HashMap 的区别:
1、HashMap是通过hashcode()对其内容进行快速查找的;HashMap中的元素是没有顺序的;
TreeMap中所有的元素都是有某一固定顺序的,如果需要得到一个有序的结果,就应该使用TreeMap;
2、HashMap继承AbstractMap类;覆盖了hashcode() 和equals() 方法,以确保两个相等的映射返回相同的哈希值;
TreeMap继承SortedMap类;他保持键的有序顺序;
3、HashMap:基于hash表实现的;使用HashMap要求添加的键类明确定义了hashcode() 和equals() (可以重写该方法);为了优化HashMap的空间使用,可以调优初始容量和负载因子;
TreeMap:基于红黑树实现的;TreeMap就没有调优选项,因为红黑树总是处于平衡的状态;
4、HashMap:适用于Map插入,删除,定位元素;
TreeMap:适用于按自然顺序或自定义顺序遍历键(key);
9、Vector、ArrayList 和 LinkedList 有什么区别 ?
vector是Java早期提供的线程安全的动态数组,如果不需要线程安全,不建议选择。
ArrayList是应用更加广泛的动态数组实现,它不是线程安全的,所以性能要好很多。
LinkedList则采用了双向链表,所以他不需要向上面两者那样调整容量,它也不是线程安全的。
10、Arrays.ArrayList 和 java.util.ArrayList 有什么区别 ?
Arrays.ArrayList 没有add()接口,并且修改元素也是通过修改之前传递进去的固定长度数组来实现,
java.util.ArrayList 是List接口的实现类
11、Hashtable和HashMap的区别
HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。
HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsValue 和 containsKey。因为 contains 方法容易让人引起误解。
HashTable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的一个实现。
HashTable 的方法是 Synchronize 的,而 HashMap 不是,在多个线程访问 Hashtable 时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。
Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一样,所以性能不会有很大的差异。
12、分别使用 HashMap 和 List 以及数组统计数组中相同的值出现的次数
String[] array = {"abc" , "ABC" , "123" , "def" , "^_^" , "def" , "abc"};
abc 3
123 1
def 2
_ 1
13、请写出 Iterator 迭代器的优点
提供一种统一的、不依赖与索引的迭代方式
惰性计算,节省内存
14、请写出循环 List 、Set、Map 的代码
循环List
for (Integer integer:list2){
System.out.println(integer);
}
循环Set
for (Object e:set01){
System.out.print(e+"\t");
循环Map
System.out.println(key+"="+treeMap.get(key));
}
15、以下哪个集合接口支持元素排序? C
A.Collection
B.Set
C.List
D.00220Map