List:元素是有序的,元素可重复,
Map集合存储键值对,一对一对存储,保证键的唯一性
ArrayList:
需求。将自定义对象作为元素存入ArrayList集合中,并除去重复元素
存人对象,同姓名同年龄,视为重复元素
思路
1对人描述
2定义容器,,将人存入
3取出
class Person
{
private String name;
private int age;
person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return this.name=name;
}
public int age()
{
return this.age= age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p=(Person)obj;
return this.name.equals(p.name)&&this.age=p.age;
}
}
class ArrayListTest2
{
public static void main (String []args)
{
ArrayList al=new ArrayList();
al.add(new person("lisi,30"));
al.add(new person("lisi1,30"));
al.add(new person("lisi1,32"));
al.add(new person("lisi2,33"));
al.add(new person("lisi2,32"));
al=singleElement(al);//通过调用去除重复元素的方法,编译运行发现重复元素并未消失
//原因,ArrayList并不知道自定义判断的条件,只判断对象是否相同
//equals(),他使用对象的equals方法和另外的对象进行比较
//因此该容器比较使用的是Person类中的equals方法,但person类中的equals是继承object类中的equals
//方法,其比较的是地址值,因为都是new的对象,所以地址值不同,因此要在person类中对equals进行覆 //写
Iterator it=new Iterator();
while(it.hasNext())
{
//Object obj=it.next();由于add方法添加的是Object,但是Object中没有get方法,所以转型
//Person p =(Person)obj;
Person p= (Person)it.next();
sop(p.getName()+"...."+p.getAge); }
}
public static ArrayList singelElement(ArrayList al)
{
//定义一个零时容器
//遍历老容器
//判断容器中是否有该元素
ArrayList newAl=new ArratList();
Iterator it=new Iterator();
while(it.hasNext())
{
Object obj=it.next();
if(!newAl.contains(obj))
{
newAl.add(obj);
}
}
return newAL;
}
}
Map集合
基本特点
该集合存储键值对,一对一对存储,保证键的唯一性
1添加
put(K key, V value)
2删除
clear();\
remove(Object key)
3判断
contanisValue(Object value)
contanisKey(Object key)
4获取
get (Object key)
size()
values()
entryset()
keySet()
Map
-----Hashtable:底层是哈希表数据结构,不可以存入null为键值的情况,线程同步
-----HashMap:底层是哈希表数据结构,允许空键空值,线程不同步
-----TreeMap:底层是二叉树结构,线程不同步,可以给Map集合中的键排序
import java.util.*;
class MapDemo
{
public static void main(String []aggs)
{
Map <String,String> map=new HashMap<String,String>();
map.put("01","java1");
import java.util.*;
class MapDemo
{
public static void main(String []aggs)
{
Map <String><String> map=new HashMap<String><String>();
map.put("01","java1");//添加元素时,相同的键后添加值会覆盖原值
map.put("04","java2");
map.put("02","java3");
map.put("03","java4");
System.out.println("包含02吗"+map.containsKey("02"));
System.out.println("获取03"+map.get("03"));
System.out.println("删除02"+map.remove("02"));
System.out.println("Map"+map);
Collection <String> coll =map.values();
System.out.println("获取map集合中的值"+coll);
}
}
map集合中的两种取出方式
1KeySet:将map中所有的键存入set集合中,使用其迭代方式,在通过get方法获取每一个键对应的值
2entrySet:Set<Map.Entey<k,v>> enteySet:将集合中的映射关系存入Set,
import java.util.*;
class MapDemo1
{
public static void main(String [] args)
{
Map<String,String> map=new HashMap()<String,String>;
map.put("01","java1");
map.put("02","java5");
map.put("03","java2");
map.put("04","java3");
Set <String> keySet= map.keySet();//获取map集合中所有键的set集合keySet();
Iterator<String> it=keySet.iterator();//使用set集合中的迭代器
while(it.hasNext())
{
String key=it.next();
String value=map.get(key);//通过get方法获取值
System.out.println(key+value);
}
//将集合中的映射关系取出
Set <Map.Entry<String,String>> enteySet=map.entrySet();
Iterator<Map.Entry<String,String>> it=entrySet.iterator();
while(it.hasNext)
{
Map.Entry<String,String> me=it.next();
String key=me.get(key);
String value=me.get(value);
}
}
} |