在面向对象的思想中,为了对多个对象的操作,就要对对象进行存储操作。java集合就像是一个容器,可以存放数量不等的多个对象,还可以保存有映射关系的关联数组。
java集合的分类
- 1、java集合可以分为Collection 和 Map两种体系,在这里简单介绍三种具体的实现类
- 2、Collection接口:List :元素有序,可重复性。–》ArrayList
Set:元素无序,不可重复性。–》HashSet - 3、Map接口:具有映射关系的“Key-Value”的集合。–》HashMap
- 测试Collection接口实现ArrayList类的应用 具体的操作请看官方的JDK文档。
Collection coll = new ArrayList();
coll.add(123);
// ((ArrayList) coll).add(new Date());
coll.add(new Date());
Collection coll2 = new ArrayList();
coll2.add(123);
coll2.add(new String("Aa"));
//保留两个集合相同的部分,如果有,就返回true
System.out.println(coll.retainAll(coll2));
Iterator iterator = coll.iterator();
//遍历集合
while(iterator.hasNext()) {//如果由下一个元素,返回值就为true,就往下执行
System.out.println(iterator.next());
}
//遍历coll2的集合
Iterator iterator1 = coll2.iterator();
while(iterator1.hasNext()){
System.out.println(iterator1.next());
}
//增强遍历-->foreach循环
for (Object obj : coll2) {
System.out.println(obj);
}
- Set实现类HashSet Set:存储的元素是无序的,不可重复的
1、无序性:元素在底层存储的位置是无序的。–>无序性 != 随机性。
2、不可重复性:Set添加进相同的元素的时候,后面的重复的就不可添加进去。
说明:要求添加进Set的所在类,一定要重写equals和HashCode方法。进而可以保证set的集合的不可重复性。
Set的存储机制采用了 哈希算法机制。;
Set set = new HashSet();
set.add(123);
set.add(456);
set.add(new Date());
set.add(new String("AA"));
person p1 = new person();
person p2 = new person();
set.add(p1);
set.add(p2);
System.out.println(set);
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
person person = (person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
//重写hashCode,在存入Set集合中的相同对象就会不一样。
@Override
public int hashCode() {
return Objects.hash(name, age);
}
- Map的实现类HashMap ,key是用set来存放的,不可重复,value是用collection来存放的,可以重复;一个key-value是一个entry,entry是存放在set上的,也是不可以重复的。对于对象来说,向HashMap中添加元素的时候,会调用key所在的类的equals方法。判断两个key是否相同。
Map map = new HashMap();
map.put(1,"Aa");
map.put(2,"Bb");
map.put("CC",3);
map.put("p1",new person());
map.put("p1",new person());
System.out.println(map.size());//输出为4,因为对象的key值相同,会调用person类的equals方法进行比较。
//遍历HashMap集合方法
//遍历key集 -->key集为Set集合,所以是无序的且不重复的
Set key = map.keySet();
for(Object obj : key) {
System.out.println(obj);
}
System.out.println("----------------------");
//遍历value集 -->value集为Collection集合
Collection collection = map.values();
//用迭代器来遍历
Iterator iterator = collection.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("---------------------");
//遍历key-value键值对
//方式一
//思路:先取出相应的key值,再通过get方法取出value值
Set key1 = map.keySet();
for (Object obj : key1) {
System.out.println(obj + "==" + map.get(obj));
}
//方式二:利用HashMap现成的方法-->entrySet
Set set = map.entrySet();
for (Object obj : set) {
//将set强转为Map.Entry类型
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry);
}
今天又是愉悦的一天,每天保持好心情。加油,共勉之。