黑马程序员---自学随堂笔记----集合

Collections类,是可以对Set、List和Map等集合进行操作的工具类,常用方法:

1、Map:存储的是键值对,且保证键的唯一性

!——Hashtable:哈希表数据结构,不可以存入null键和null值,线程同步;

!——HashMap:哈希表数据结构,可以存null键和null值,线程不同步;

!——TreeMap:实现SortedMap接口,底层二叉树,不同步,对key排序。

Map集合类没有遍历集合的直接方法,只能通过Map对象的keySet()获取键的Set集合,在通过Set集合的迭代器获取键和值,或者调用entrySet()获取键和值的映射关系再存入到Set集合中,分别同Map.Entry接口中方法getKey()和getValue()获取键和值。当然,既然也可以通过增强for循环获取,具体三种方法代码如下:

<span style="font-size:18px;">package com.xiongmc.Collection;

/*

* 存入学生(姓名,年龄,地址)

* 按学生姓名拼音排序
* 学生姓名和年龄相同视为同一个人
*/
import java.util.*;
publicclass HashMapTest {
@SuppressWarnings("unchecked")
publicstatic void main(String[] args){
Map<Students,String> hs =new HashMap();
hs.put(new Students("zhangsan",23),"xizang");
hs.put(new Students("lisi",20),"xinjiang");
hs.put(new Students("wangwu",25),"neimenggu");
hs.put(new Students("yangma",19),"guangxi");
//第一种取出方式
Set<Students> keyset = hs.keySet();
Iterator<Students> it = keyset.iterator();
while(it.hasNext()){
Students s = it.next();
System.out.println(s.toString()+".."+hs.get(s));
}
//第二种取出方式
Set<Map.Entry<Students,String>> en = hs.entrySet();
Iterator<Map.Entry<Students, String>> iter = en.iterator();
while(iter.hasNext()){
Map.Entry<Students,String> me = iter.next();
Students stu = me.getKey();
String addr = me.getValue();
System.out.println(stu+"..."+addr);
}
//第三种取出方式
for(Object key : hs.keySet()){
System.out.print(key+"--->");
System.out.println(hs.get(key));
}
}
}
class Studentsimplements Comparable<Students>{
private String name;
privateint age;
public Students(String name,int age){
this.name = name;
this.age = age;
}
publicint compareTo(Students s){
int num =this.name.compareTo(s.name);
if(num==0){
returnnew Integer(this.age).compareTo(s.age);
}
return num;
}
//以下hashCode()和equals()保证键的唯一性
publicint hashCode(){
return name.hashCode()+age*5;
}
//重写equals方法
publicboolean equals(Object obj){
if(!(objinstanceof Students)){
thrownew ClassCastException("类型不匹配!");
}
Students s = (Students)obj;
returnthis.name.equals(s.getName()) && this.age==s.getAge();
}
//类的基本方法定义
public String getName(){
return name;
}
publicint getAge(){
return age;
}
public String toString(){
return name+".."+age;
}
}</span>

迭代器Iterator接口,用来遍历Collection集合元素,只有三个方法:

boolean hasNext():如果集合中还有没被遍历的,返回true;

Object next():返回集合里的下一个元素;

void remove():删除集合里上一次next方法返回的元素。

2、List:有序集合,元素可以重复,有索引
List集合判断元素是否相同,依据的是元素的equals()方法,其实remove()和contains()方法内部调用的就是equals()来先找到,再进行处理的。

!——ArrayList:数据结构使用的是数组结构,查询快,增删慢,长度可变;

!——LinkedList:底层数据结构使用的链表,增删速度快,查询慢;

!——Vector:底层是数组数据结构(同步的)被ArrayList替代

ArrayList:容器默认大小是10,当超过时按50%增长==>15
Vector:容器默认大小是10,当超过时按100%增长==>20

3、Set:无序集合,元素不可以重复

!——HashSet:数据机构是哈希表,线程非同步,元素值可以是null;存放到此集合中的对象应该重写hashCode()和equals(),hashCode值是判断元素是否一致的唯一标准,因采用hash算法,效率比较高。

!——TreeSet:采用二叉树数据结构,可对Set集合中的元素排序;存放到此集合中的对象要么实现Comparable接口,要么可以在构造TreeSet对象的时候传递一个实现了Comparator接口的比较器对象。关于比较器的设计,需要实现Comparetor接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值