杰点

hello java

集合

9.集合框架
1)基本概念:用于存放对象的对象(与数组类似.即集合也是对象.只能存对象)

2)和数组的差异
A.数组存放的内容由数组类型指定,集合存放的内容为Object类型的引用
B.数组只有1种数据结构(按照索引存储),集合的数据结构分为Set.List和Map三大类.每个类中还包含若干的小类
C.数组的容量在创建时指定,无法在使用中动态扩展.所有集合类型的容量都是不定的.根据需求自动扩展

3)基本组成
A.接口:用于定义集合的功能框架
B.实现类:实现对应的接口.实现集合的具体功能
C.工具:提供对集合操作的辅助功能

4)接口
A.Collection
定义存储内容为单个对象的数据结构及相关的操作方法
B.Set
继承Collection,存储内容无序且不可重复
C.List
继承Collection,存储元素有序且可以重复
D.SortedSet
继承Set.可以对存储内容进行排序
E.Map
定义存储内容为2个对象(键值对)的数据结构及相关的操作方法
键(标识性,所以不可重复)对象无序且不可重复,值对象可以重复顺序由对应的键对象决定
F.SortedMap
继承Map,可以对键对象进行排序


5)名词解释
A.无序:存储顺序与放入顺序无关
B.有序:存储顺序与放入顺序一致
C.排序:按照一定的逻辑对内容进行排序,存储顺序依照排序的结果进行排列

6)实现类
A.List(3个实现类)
ArrayList:内部存储形式为数组,擅长查询操作,对插入和删除操作效率较低

LinkedList:内部存储形式为双向链表.擅长插入和删除操作,对查询操作效率较低

Vector:ArrayList的线程安全版本,可保证多线程并发防问时的数据准确和一致性,但对效率影响很大,实际开发中使用较少


B.HashSet的重复性判断
i)在执行add()操作时进行,将加入的对象与集合中已存在的对象进行比较,满足相等性条件时,待加入的对象无法加入集合中
ii)比较内容
将2个对象调用equals()结果为true
将2个对象分别调用hashcode()的结果相同
同时满足以上2个条件则判断两个对象相同

C.TreeSet
构造器
TreeSet()--使用默认的排序和重复性判断逻辑
注:只有少量类型(String.包装类型)存在默认排序和重复性判断逻辑,如Integer升序;如果对没有默认的排序和重复性判断逻辑的对象使用该操作,将在执行时产生ClassCastException
TreeSet(Comparator)--使用指定的比较器实现排序和重复性判断逻辑
实现原理:在加入元素时执行比较(原有元素和待加入的元素),比较时调用比较器的compare().根据返回值决定排列的顺序是否重复
compare()的第一个参数--待加入的元素
compare()的第二个参数--集合中原有的元素
返回值
>0    待加入元素在原有元素的右边
<0    待加入元素在原有元素的左侧
=0    相同,待加入元素不加入
注:当>0或<0时,如集合的相应方向存在未比较的元素,则应继续比较直至完全确定位置后才执行加入

D.Map的实现类
HashMap和HashTable的关系相当于ArrayList和Vector的关系
HashMap的重复性判断规则(key)
在元素加入时(put)进行判断.方式与HashSet完全相同
E.TreeMap的排序和重复性判断规则(key)
在元素加入时(put)进行判断.方式与TreeSet完全相同

 1 //List集合 实现类LinkedList ArrayList
 2 import java.util.*;
 3 public class ListTest {
 4 
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         String a="A",b="B",c="C",d="D",e="E"//定义字符串对象
11         List<String> list= new LinkedList<String>(); //创建List集合
12         list.add(a); //集合中添加元素
13         list.add(e);
14         list.add(d);
15         Iterator<String> fristIterator=list.iterator();//创建集合迭代器
16         System.out.println("修改前集合中的元素为");
17         while(fristIterator.hasNext()){
18             System.out.println(fristIterator.next()+" ");
19         }
20         list.set(1,b);
21         list.set(2,c);
22         Iterator<String> it=list.iterator();
23         System.out.println("修改后集合中的元素为");
24         while(it.hasNext()){
25             System.out.println(it.next()+" ");
26         }
27 
28     }
29 
30 }


 1 //MAP集合 和 泛型
 2 import java.util.*;
 3 public class MapTest {
 4 
 5     /**泛型应用
 6      * @param args
 7      */
 8     public static void main(String[] args) throws Exception {
 9         // TODO Auto-generated method stub
10 
11         //HashMap 定义泛型 类型变量
12         HashMap<String,Integer> maps= new HashMap<String,Integer>();
13         maps.put("zhangsan",28); //添加元素
14         maps.put("lisi",33);
15         maps.put("wangwu"23);
16         
17         //返回Set集合
18         Set<Map.Entry<String, Integer>> entrySet= maps.entrySet();
19         
20         //迭代输出集合
21         for(Map.Entry<String,Integer> entry : entrySet)
22         {
23             System.out.println(entry.getKey()+" "+entry.getValue());
24         }
25         //转换类型
26         Object ob="abc";
27         String x3= autoConvert(ob);
28     }
29     
30     private static <T> T autoConvert(Object object){
31         //泛型方法  类型转换 
32         return (T)object;
33     }
34     
35     private static <T> void fillArray(T[] a,T obj ){
36         //将某个类型的对象 填充到 对应类型的数组
37         for(int i=0;i<a.length;i++)
38             a[i]=obj;
39     }
40 
41 }

posted on 2010-12-29 13:31 杰点 阅读(221) 评论(0)  编辑  收藏 所属分类: JAVA


只有注册用户登录后才能发表评论。


网站导航:
 
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

留言簿

文章分类

文章档案

搜索

最新评论