java中的集合框架图
如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合
Collection单列集合:继承了Iterator接口所以具有了iterator()方法 ,该方法返回一个Iterator<T>,这个接口具有
HasNext (),next(),remove()3个方法可以在实现类里完成实现。
hasNext():判断是否有下一个元素
cusor是当前的操作下标
next():读取下一个元素
remove():删除参数
lastret为上个操作的下标
Collection有两个子接口set和list
set:储存唯一,不要求有序的一组对象
set存储的是元素的引用,如两个元素的引用相等,或者其值相等,hash值也想相等,则set只保存一个同理set集合中只有一个null
例:
Set set=new HashSet
String a=" ";
String b=a;
set.Add(a);
set.add(b);
//输出集合set的元素个数
System.out.println(set.size()); //结果是1个 :两者的引用为一个所以只能添加一个
list:存储一组不唯一,但有序的对象
list的两个实现类:
ArrayList:与数组相同的存储方式,但是完成了存储集合的大小可变的改变比数组更灵活。
LinkedList:链式储存,集合的每一项都储存了下一项的引用,更利于元素的新增和删除操作,相比后ArrayList查询和修改,LinkedList新 增和删除
其实在ArrayList之前还有一个Vector集合类,他与ArrayList基本相同,最大的区别就是Vector是线程安全的,而ArrayList是线程不安全 的。ArrayList轻安全,而速度快,Vector线程安全,但速度慢。
Map:双列集合: 集合中的每一项都是成对的key ,value Map接口并不继承Iterable接口或实现该接口所以不能直接进行遍历
key:有唯一,不要求有序
value:不唯一,不要求有序
Map集合遍历的三种方法:
public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>();
map.put("CN", "*");
map.put("UK","联合国"); //方法1 双列集合无法遍历了?那就通过方法把他转成单列 ! 用集合名.entryset方法 得到Set<Entry<String, String>>的返回值
for (Entry item : map.entrySet()) {
System.out.println(String.format("key的值是%s\tvalue的值是%s",item.getKey(),item.getValue()));
} //方法2 通过得到key键的集合,然后通过Map的方法map.get(key)用key得到value
for (String key : map.keySet()) {
System.out.println(String.format("key的值是%s\tvalue的值是%s",key,map.get(key)));
}
//方法3for循环中自动实现了迭代器,如不用for循环,那就手动完成迭代器操作
Iterator<String> keys=map.keySet().iterator();
while(keys.hasNext()){
String item=keys.next();
System.out.println(String.format("key的值是%s\tvalue的值是%s",item,map.get(item)));
} }
如果只是想遍历value的值那直接使用 map.values()方法就行了;
注:所有继承或实现了Iterable类的集合类都可以用迭代器进行遍历
例:
ArrayList(继承)- AbstractList -(在这个ArrayList的父类中实现了继承自 Iterable的iterator方法,并得到了该方法返回的类Iterator及其的3个方法,实现了他们之后使自身可使用迭代器) - implements(实现) -- List extends (继承) - Collection extends (继承)- Iterable 所有可以使用迭代器的集合类都有相似的继承,实现关系。