1.讲一下HashMap和HashTable(haxi t bo)的区别?

在Java 2以前,一般使用Hashtable来映射键值和元素。为了使用Java集合框架,Java对Hashtable进行了重新设计,但是,为了向后兼容保留了所有的方法。Hashtable实现了Map接口,除了Hashtable具有同步功能之外,它与HashMap的用法是一样的。·
在使用时一般是用ArrayList代替Vector,LinkedList代替Stack,HashMap代替HashTable,即使在多线程中需要同步,也是用同步包装类。

2.请说出集合类中List、Map、Set的区别

List和Set是Collection的子接口,map不是。
List的底层是数组的方式实现,Set是散列表的方式实现,map是键值对的方式。
list是有序可重复的,Set是无序不可重复的,map是有序,key不重复,value可重复
list和Set可直接使用itertator来进行遍历,map只能通过先遍历Key在遍历value.

3.ArrayList和Vector(wei可t)的区别?

这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是HashSet类集合的最大不同处,HashSet类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清楚ArrayList与Vector的功能,我们使用对比方式,更有利于说明问题)。

接着才说ArrayList与Vector的区别,这主要包括两个方面:.
(1)同步性:
Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。

备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。所以,我们讲课时先讲老的。
(2)数据增长:
ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。
总结:即Vector增长原来的一倍,ArrayList增加原来的0.5倍。

4.Collection 和 Collections的区别?

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种操作。

5.collections的理解和运用。

Collections和Arrays一样是一个不可实例化的类,提供了一些静态方法来操作Collection。
1.排序 sort
public static void sort(List list)
public static void sort(List list, Comparator c)
用于对List排序,可以使用自然排序,也可以指定Comparator,返回的是从小到大的有序List。

2.二分查找 binarySearch
public static int binarySearch(List list, Object key)
public static int binarySearch(List list, Object key, Comparator c)
应用和排序一样,List必须是有序的,否则改方法无作用。

3.反转
public static void reverse(List list)
适用于List,返回的List和原来的顺序相反

4.打乱顺序
public static void shuffle(List list)
public static void shuffle(List list, Random rnd)
就是把原来的List的顺序随机弄乱。

5.元素直接置换
public static void swap(List list, int i, int j)
这个方法显得有点牵强,我觉得没有必要出现在API里面,实现就是一条语句:
list.set(i, list.set(j, list.get(i)));

6.填充
public static void fill(List list, Object obj)
把List中的元素全部用一个值填充

7.拷贝
public static void copy(List dest, List src)
把源List拷贝到目的List,目的List必须足够大

8.最小值
public static Object min(Collection coll)
public static Object min(Collection coll, Comparator comp)

9.最大值
public static Object max(Collection coll)
public static Object max(Collection coll, Comparator comp)

10.移动
public static void rotate(List list, int distance)
元素右移,有点像 int a=0xff>>8的味道

11.替换
public static boolean replaceAll(List list, Object oldVal, Object newVal)
看方法名就知道了

12.求子List
public static int indexOfSubList(List source, List target)
public static int lastIndexOfSubList(List source, List target)
和String类的indexOf和lastIndexOf类似

13.同步
public static Collection synchronizedCollection(Collection c)
public static List synchronizedList(List list)
public static Map synchronizedMap(Map m)
public static Set synchronizedSet(Set s)
public static SortedMap synchronizedSortedMap(SortedMap m)
public static SortedSet synchronizedSortedSet(SortedSet s)
因为Collection框架中的类大部分都是未经过同步的,可以通过这些方法同步
注意这里没有使用方法重载,因为那么命名不同。另外,返回的虽然是一个同步了的Collection
但是通过迭代器访问时仍然需要自己同步,因为迭代器返回没有被同步。

14.只读
public static Collection unmodifiableCollection(Collection c)
public static List unmodifiableList(List list)
public static Map unmodifiableMap(Map m)
public static Set unmodifiableSet(Set s)
public static SortedMap unmodifiableSortedMap(SortedMap m)
public static SortedSet unmodifiableSortedSet(SortedSet s)
这些方法返回一个只读的Collection,我发现这个有的时候真的特别有用,如果你试图调用修改
方法,会获得一个UnsupportedOperationException系统异常。

15.常量
public static final List EMPTY_LIST = new EmptyList()
public static final Map EMPTY_MAP = new EmptyMap()
public static final Set EMPTY_SET = new EmptySet()
这些常量就是表示空的集合,本身不是null,但是不包含任何元素。

16.单元素集合
public static Set singleton(Object o)
public static List singletonList(Object o)
public static Map singletonMap(Object key, Object value)
这些集合只含有一个元素。

17.多元素集合
public static List nCopies(int n, Object o)
返回一个List,含有n个相同的元素

18.比较器常量
public static Comparator reverseOrder()
这个比较器和自然顺序的排序相反。

19.最后2个
public static ArrayList list(Enumeration e)
public static Enumeration enumeration(final Collection c)
List和Enumeration的转换,由于Enumeration属于过时的API,应该没有什么机会用到他们。

Collection集合理解

1.集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组都是容器,它们有啥区别呢?
数组的长度是固定的。集合的长度是可变的

2.数组中存储的是同一类型的元素,可以存储基本数据类型的值。
集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储

3.而Collection是List和Set的父级类型
Collection还一个帮助类Collections他提供一系列静态方法实现对各种集合的搜索、排序以及线程安全化等操作。

路过记得点赞🙃🙃