Map集合:该集合存储键值对.是一对一对往里存.而且要保证键的唯一性.
难学的方法:
entrySet()
keySet()
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的.
|--HashMap:底层是哈希表数据结构,允许使用null值null键.该集合是不同步的.效率高.
|--TreeMap:底层是二叉树结构.线程不同步.可以用于该map集合中的键排序.
和Set很像.
其实Set底层就是使用了Map集合.
//ArrayList 迭代器取出方式
ArrayList al=new ArrayList();
al.add("java01");
al.add("java01");
al.add("java01");
Iterator it=al.iterator();//获取迭代器,用于取出集合中的元素.用方法获取对象,不是new一个.
while(it.hasNext())
{
sop(it.next());
}
for(Interator it=al.iterator();it.hasNext(); )
{
sop(in.next());//for循环结束后new的对象也就释放了
}
for(int x=0; x<al.size(); x++)
{
sop("al("+x+")="+al.get(x));
}
//ArrayList特有的迭代器,可以对集合有更多的操作。
/*
List集合特有的迭代器.ListIterator是Iterator的子接口.
在迭代时,不可以通过集合对象的方法操作集合中的元素.
因为会发生并发异常.ConcurrentModificationException异常.
所以在迭代时只能用迭代器的方法操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作.
如果想要其他的操作如添加,修改,就需要使用其子接口,ListIterator.
该接口只能通过List集合的ListIterator方法获取.
*/
for(ListIterator li=al.ListIterator();li.hasNext(); )
{
sop("hasprevious():"+li.hasprevious);//反向索引判断前边有没有元素
Object obj=li.next();
if(obj.equals("java02"))//特有的方法,如果使用传统的迭代器没有该方法
//li.add("java088");
li.set("java088");
sop("hasNext():"+li.hasNext());//判断后边有没有元素
sop("hasprevious():"+li.hasprevious);
for( ;li.hasprevious(); )//逆向遍历
{
sop("pre::"+li.previous())
}
}
//Vector集合的取出方式:
/*
枚举就是Vector特有的取出方式.
发现枚举和迭代器很像.
其实枚举和迭代是一样的.
因为枚举的名称以及方法的名称过长.
所以被迭代器取代了.
枚举就被替代了.
*/
import java.util.*
class VectorDemo
{
public static void main(String[] args)
{
Vector v=new Vector();
v.add("java01");
v.add("java02");
v.add("java03");
v.add("java04");
Enumeration en= v.elements();
while(en.hasMoreElements())
{
System.out.println(en.nextElement());
}
}
}
//LinkedList集合取出方式
LinkedList link=new LinkedList();
link.addFirst("java01");
link.addFirst("java01");
link.addLast("java01");
link.addLast("java01");
sop(link.getFirst());
sop(link.getLast());
while(!link.isEmpty)
{
sop(link.removeFirst());
//sop(link.removeLast());
}
/*
map集合的两种取出方式:
1,Set<k> keySet:将map中的所有的键存入到Set集合.因为Set具备迭代器.
所以可以迭代的方式取出所有的键.再根据get方法.获取每一个键对应的值.
Map集合的取出原理:将map集合转成set集合.再通过迭代器取出.
2,Set<Map.Entry<K,V>> entrySet:将map集合中的映射关系存入到了Set集合中,
而这个关系的数据类型就是:Map.Entry.
*/
import java.util.*;
class MapDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Map<String,String> map=new HashMap<String,String>();
map.put("01","zhangsan1");
map.put("04","zhangsan4");
map.put("02","zhangsan2");
map.put("03","zhangsan3");
//先获取map集合的所有键的Set集合,keySet();
Set<String> keySet =map.keySet();
//有了Set集合就可以获得迭代器了
Iterator<String> it= keySet.iterator();//调用迭代器
while (it.hasNext())
{
String key=it.next();
//有了键就可以通过map集合的get方法获取其对应的值了
String value=map.get(key);
sop("key:"+key+",value:"+value);
}
}
}
-------------------------------------------------
//2,Set<Map.Entry<K,V>> entrySet
import java.util.*;
class MapDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Map<String,String> map=new HashMap<String,String>();
map.put("01","zhangsan1");
map.put("04","zhangsan4");
map.put("02","zhangsan2");
map.put("03","zhangsan3");
//将Map集合中的映射关系取出,存入到Set集合中.
Set<Map.Entry<String,String>> entrySet=map.entrySet();
Iterator<Map.Entry<String,String>> it= entrySet.iterator();//定义迭代器
while (it.hasNext())
{
Map.Entry<String,String> me=it.next();//取得时候返回的是Map.Entry对象
String key=me.getKey();
String value=me.getValue();
sop(key+"::"+value);
}
}
}
} |