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();
}
}
版权声明:本文标题:《Java基础知识》 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1703480145h453195.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论