admin 管理员组

文章数量: 887021


2023年12月25日发(作者:vb最简单的代码)

《Java基础知识》

一、collection和map的区别与联系:

Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对。Collection接口,包含list和set子接口;继承Map的类有HashMap,HashTable。

Collection:

1、Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。

Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

2、所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数和有一个Collection参数的构造函数。其中无参数的构造函数用于创建一个空的Collection;有一个Collection参数的构造函数用于创建一个新的Collection。

Map:

1、Map对象中,每一个关键字最多有一个关联的值。

2、不能包括两个相同的键,一个键最多能绑定一个值。null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。

3、当get()方法返回null值时,即可以表示Map中没有该键,也可以表示该键所对应的值为null。因此,在Map中不能由get()方法来判断Map中是否存在某个键,而应该用containsKey()方法来判断。

4、Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

二、list和set的区别和联系:

区别:

List接口:List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。

Set接口:Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有(e2)=false,Set最多有一个null元素。 很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

联系:

List和Set都是接口。他们各自有自己的实现类,有无顺序的实现类,也有有顺序的实现类。最大的不同就是List是可以重复的。而Set是不能重复的。List适合经常追加数据,插入,删除数据。但随即取数效率比较低。Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。

list,set都是可以使用()排序的

三、Arraylist和Linkedlist和vector的区别和联系:

区别:

ArrayList:1.基于动态数组的数据结构,初始容量为10,容量不足时,在缺省的情况下自

动增长原来的50%。

2.非线程安全。

3.允许Null元素。

LinkedList:1.底层的数据结构是双链表。

2.非线程安全。

3.允许Null元素。

Vector:1.基于动态数组的数据结构,初始容量为10,容量不足时,在缺省的情况下自动增长原来的一倍。

2.同步线程安全。

3.允许Null元素。

联系:

如果是非线程安全的话,可以使用ArrayList或LinkedList。这样可以节省同步耗费的开销。如果只是查找特定位置的元素或者在集合的末尾插入、删除对象,可以使用ArrayList或Vector,他们开销的时间是一样的,可以用O(1)表示。如果在集合的其他位置插入、删除对象,他们开销的时间会呈线性的增长,可以用O(n-i)表示。因为ArrayList和Vector都是数组实现,所以在集合中间插入和删除需要移动后面所有的元素。LinkedList在插入、删除集合任何位置的元素所开销的时间都是一样的,可以用O(1)表示。因为LinkedList是用链表实现,在内存里是离散的(不连续),里面的每一个元素都有下一个元素引用,所以不支持高效的随机元素访问,查询的时候比ArrayList和Vector慢,开销时间为O(i),ArrayList和Vector查询开销的时间为O(1)。

四、Hashtable和HashMap和TreeMap的区别和联系:

Hashtable:是早期 Java 类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用。

HashMap:是应用更加广泛的哈希表实现,行为上大致上与 HashTable 一致,主要区别在于HashMap 不是同步的,支持 null 键和值等。通常情况下,HashMap 进行 put 或者 get 操作,可以达到常数时间的性能,所以它是绝大部分利用键值对存取场景的首选,比如,实现一个用户 ID 和用户信息对应的运行时存储结构。在HashMap下有一个子类:LinkedHashMap,有序Map,序指的是元素的添加顺序。

TreeMap:则是基于红黑树的一种提供顺序访问的 Map,和 HashMap 不同,它的 get、put、remove 之类操作都是 O(log(n))的时间复杂度,具体顺序可以由指定的 Comparator 来决定,或者根据键的自然顺序来。TreeMap有序Map,序指的是Comparator或Compareable。

五、案例:

(接口)

package tt;

import ;

import tions;

import or;

import List;

import ;

public class ListTest {

public static void baseUse(){

//链表实现

List list = new LinkedList();

//数组实现

//List list = new ArrayList();

("a");//向列表的尾部追加"a"

n("使用list接口的add()一个参数的方法:"+list);

(0,"b");//在指定位置插入"b"

n("使用list接口的add二个参数的方法:"+list);

("a");//移除列表中"a"

n("使用list接口的remove()方法删除a:"+list);

}

public static void useSort(){

String[] strArray = new String[] {"z", "a", "c","C"};

List list = (strArray);

n(list);

(list);//根据元素自然顺序排序

n("自然顺序:"+list);

(list, _INSENSITIVE_ORDER);//根据指定的字母方式排序

n("指定字母方式:"+list);

(list, eOrder());//根据反转自然顺序方式排序

n("反转自然顺序:"+list);

(list, _INSENSITIVE_ORDER);

n(list);

e(list);//反转列表排序

n(list);

}

public static void main(String[] args) {

baseUse();

// useSort();

}

}


本文标签: 元素 插入 集合 顺序 删除