集合

1.为什么单向链表查询效率较低?
因为单向链表中的每个元素在空间的存储位置上没有规律,也没有顺序,那么在查找某个元素的时候必须从头节点挨着往后找,直到找到为止。
2.为什么单向链表的增到效率较高?
因为链表每个元素存储的空间是是没有顺序的,删除或者添加某个元素,只需要让指针重新指向即可。不需要其他元素位移。

關於collection集合中的方法
boolean add(object element);向集合中添加元素
void clear();清空集合
boolean contains(object o);判断集合中是否包含某个元素
boolean isEmpty();判断集合中是否有元素
Iteratoriterator();获取集合所依赖的迭代器对象
boolean romove(object o);删除集合中某个元素
int size();获取集合中元素的个数
object[]toArray();将集合转换为数组
LinkList适合增删元素,不适合储存。
特有的方法pop弹出第一个元素
push在开头加一个元素

contains方法底层调用的是equals方法,如果equals返回true就是包含。

关于Map集合中常用的方法
void clear() ;清空Map
Map boolean containsKey (object key) ;判断Map中是否包含这样的key.
boolean containsvalue (object value) ;判断Map中是否包含这样的value
set<Map. Entry<K,V>> entryset () 返回此映射中包含的映射关系的set视圖
object get (object key) ; 通过key获取value
value object put (object key, object value) ;向集合中添加键值对
boolean isEmpty() ;判断该集合是否为空
object remove (object key) ;通过key将键值对删除.
int size() ;获取Map中键值对的个数。
Set keySet() ;获取Map中所有的key
collection values() ;获取Map集合中所有的value
V put(K key, V value) 向 Map 集合中添加键-值对,返回 key 以前对应的 value,如果没有, 则返回 null

map中如果key重复了,value采用覆盖

Set集合: HashSet
1.Hashset底层实际上是一个HashMap , HashMap底层采用了哈希表数据结构。

2.哈希表又叫做散列表,哈希表底层是一一个数组,这个数组中每一个元素
是一个单向链表。每个单向链表都有一个独一无二的hash值,代表数组的
下标。在某个单向链表中的每一-个节点.上的hash值是相等的。hash值实际上
是key调用hashCode方法,在通过"hash function"转 换成的值.

3.如何向哈希表中添加元素:
先调用被存储的key的hashCode方法,经过某个算法得出hash值,如果在
这个哈希表中不存在这个hash值,则直接加入元素。如果该hash值已经
存在,继续调用key之间的equals方法,如果equals方法返回false,则将
该元素添加.如果equals方法返回true, 则放弃添加该元素.
Hashset其实是HashMap中的key部分。Hashset有什么 特点,HashMap中 的key应该具有相同的特点.

Sortedset集合存储元素为什么可以自动排序?
因为被存储的元素实现了Comparable接口,
SUN编写Treeset集合在添加元素的时候,会
调用compareTo方法完成比较.

ArrayList集合底层默认初始化容量是10,扩大之后容量是原容量的1.5倍
Vector 集合底层默认初始化容量是10,扩大之后容量是原容量的2.0倍

hash集合底层默认初始化容量是16,默认加载因子是0.75
hashtable 集合底层默认初始化容量是11,默认加载因子是0.75

如何优化Arraylist集合?
尽量减少扩容操作,因为扩容需要数组拷贝,数组拷贝耗内存,
一般推荐在创建集合时指定初始化容量

存储在集合中的元素应该重写equals方法
存储在HashSet或者HashMap集合的key部分的元素需要同时重写Hashcode和equals方法

Collections工具类排序list集合,但是集合中的元素必须是“可比较的”,一般自己定义类继承comparator接口:Collections.sort(list,new Productcomparator());

import java.util.*;
public class SortedSetTest {
	public static void main(String[] args) {
		SortedSet pro =new TreeSet(new ProductComparator());
		Product p1 = new Product (3.4);
		Product p2 = new Product (2.4);
		Product p3 = new Product (1.4);
		Product p4 = new Product (0.4);
		
		pro.add(p1);
		pro.add(p2);
		pro.add(p4);
		pro.add(p3);
		
		Iterator it = pro.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
}

class Product{
	double price;
	
	Product(double price){
		this.price =price;
	}
	public String toString(){
		return price+"";
	}
}

class ProductComparator implements Comparator{
	public int compare(Object o1, Object o2) {
		double price1 = ((Product)o1).price;
		double price2 = ((Product)o2).price;
		
		if(price1==price2) {
			return 0;
		}else if(price1>price2) {
			return 1;
		}else {
			return -1;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值