java集合list_set_map的区别和用法

笔记

一、Set

无序的 不可重复的

set的子类:HashSet TreeSet

遍历方法: 遍历 :1)for…each 2)迭代器*/

public class SetDemo01 {
public static void main(String[] args) {
	Set<String> set=new HashSet();
	//添加
	set.add("稻香");
	set.add("可爱女人");
	set.add("算什么男人");
	set.add("不爱我就拉倒");
	set.add("告白气球");
	System.out.println(set.add("陶喆"));
	System.out.println(set.add("算什么男人") );  //去重 放不进去
	//存储的顺序和真实容器中数据的顺序不一致,内部是根据自己的算法计算,然后存储顺序一旦确定会在改变
	System.out.println(set);
	

	//删除
	System.out.println(set.remove("稻香"));
	System.out.println(set);

	//for--each
	for(String s:set){
		System.out.println(s);
	}

	//迭代器
	Iterator<String> it=set.iterator();
	while(it.hasNext()){
		System.out.println(it.next());
	}

	}
}

1.2、HashSet

无序的 不可重复的

底层:底层由哈希表(hashtable)实现 :数组+链表|二叉树

优点:查询快,添加快,删除快

缺点:不可重,无序的

HashSet去重:

内部会先调用hashcode()方法,计算两个对象的hash值是否相同,如果不相同确定不是相同的对象,如果相同,再进一步比较equals方法中的内容

height 180 age 15 195

height 175 age 20 195

190 30 220

HashSet<Student> hs=new HashSet();
		hs.add(new Student("刘亦菲",18));
		hs.add(new Student("郑爽",17));
		hs.add(new Student("郑爽",17));
		System.out.println(hs);
		System.out.println(hs.contains(new Student("郑爽",17)));
		

	Map<Student,Integer> map=new HashMap();
	map.put(new Student("刘亦菲",18),101);
	map.put(new Student("郑爽",17),102);
	map.put(new Student("郑爽",17),103);
	System.out.println(map.get(new Student("郑爽",17)));

1.3、TreeSet

底层:二叉树(红黑树)实现

优点:,有序(内容会自动升序排序),查询效率高(根据内容查询),查询速度>list,根据索引查询还是List快

缺点:查询没有HashSet效率高

去重:对象类型进行排序,要这个类实现Comparable,重写ComparaTo方法,自定义比较规则

/*TreeSet<Integer> tree=new TreeSet();
		tree.add(103);
		tree.add(99);
		tree.add(120);
		tree.add(111);
		tree.add(111);
		System.out.println(tree);*/
		

	TreeSet<Person> tree=new TreeSet();
	tree.add(new Person("刘诗诗",25));  //
	tree.add(new Person("蔡依林",30));  //
	tree.add(new Person("蔡徐坤",20));  //
	System.out.println(tree);

二、 Map

键值对形式的数据 key->value

Key–>set集合

vlaue–>Collection集合 可重复的

一个key对应一个value

key是不可重复的

value是可重复的

2.1、放数据V put(K key, V value)

		map.put(1003, "呵呵");
		key不相同,value相同
		map.put(1000, "哈哈");
		//key相同,value不同的
		System.out.println(map.put(1001, "嘻嘻"));  //key相同,value会覆盖,返回被覆盖的value
		System.out.println(map);
		/*

2.2、boolean containsKey(Object key)

如果此映射包含指定键的映射关系,则返回 true。
​ System.out.println(map.containsKey(1003));

2.3、boolean containsValue(Object value)

如果此映射将一个或多个键映射到指定值,则返回 true。

System.out.println(map.containsValue(null));

2.4、V get(Object key)

System.out.println(map.get(1201)); //不存在返回null

2.5、V remove(Object key)

System.out.println(map.remove(1021));
System.out.println(map);

遍历:

1.获取所有的set->set集合 keySet

2.直接获取所有的值

3.Set<Map.Entry<K,V>> entrySet()

Map<Integer,String> map=new HashMap();

遍历1  获取所有的set
Set<Integer> set=map.keySet();
for(Integer i:set){
	System.out.println(map.get(i));
}
//遍历2

Collection<String> col=map.values();
for(String s:col){
	System.out.println(s);
}
//遍历3
Set<Map.Entry<Integer,String>> set=map.entrySet();
for(Map.Entry<Integer,String> m:set){
	System.out.println(m.getKey()+"-->"+m.getValue());
}


三、HashMap:

HashSet是由HashMap的key维护,底层也是哈希表实现

对象类型去重:对Map中的key进行去重,要重写hashCode和equals方法,如果想要根据value进行去重,手动遍历并判断

TreeMap: 升序

TreeSet是由TreeMap的key去维护的,底层实现也是通过二叉树实现的

对象类型去重:实现Comparable接口,重写ComparaTo方法

HashTable:

Hashtable和HashMap实现相同,Hashtable是线程安全的,HashMap线程不安全

四、Properties

存储键值对形式的数据,是Hashtable的子类

特点:键值对都会String类型的数据

	Properties p=new Properties();
	p.setProperty("1", "哈哈");
	p.setProperty("2", "呵呵");
	p.setProperty("3", "嘿嘿");
	p.setProperty("3", "哼哼");  //key相同,值覆盖
	System.out.println(p);
	System.out.println(p.getProperty("2"));
	
	p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.haha"));
	System.out.println(p.get("age"));

五、Collections 工具类

void sort(List) //对 List 容器内的元素排序,按照升序进行排序。
void shuffle(List) //对 List 容器内的元素进行随机排列
void reverse(List) //对 List 容器内的元素进行逆续排列
void fill(List, Object) //用一个特定的对象重写整个 List 容器
int binarySearch(List, Object)//采用折半查找的方法查找特定对象

List<String> ls=new ArrayList();
	ls.add("元旦");
	ls.add("春节");
	ls.add("端午节");
	ls.add("中秋节");
	ls.add("清明节");		

	List<Person> ls=new ArrayList();
	ls.add(new Person("紫霞仙子",18));
	ls.add(new Person("朱茵",16));
	System.out.println(ls);
	Collections.sort(ls);
	System.out.println(ls);	
	

	Collections.shuffle(ls);
	System.out.println(ls);
	Collections.reverse(ls);
	System.out.println(ls);
		
	Collections.fill(ls,"国庆节");
	System.out.println(ls);
		
	System.out.println(Collections.binarySearch(ls,"清明节"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值