java集合框架

集合框架包括集合与映射(Collection and Map), 以及它们的子类(容器类)
1) List 元素有先后次序的集合, 元素有index位置, 元素可以重复,继承自Collection接口,
? 实现类: ArrayList, Vector, LinkedList
2) Set 元素无续, 不能重复添加, 是数学意义上的集合, 继承自Collection 接口
? 实现类: HashSet(是一个只有Key的HashMap)
3) Collection 集概念, 没有说明元素是否重复和有序, 使用集合的跟接口, 很少直接使用
其他集合都是实现类: ArrayList, HashSet
4) Map 描述了(key:value)成对放置的集合,key丌重复,Value可以重复(key重复算一 个)


 Collection接口 表示集合的概念
    List接口
     Set接口
 List接口 表示有序线性表的概念     
     ArrayList 底层实现是数组
     LinkedList 底层实现是链表
 Set接口 表示无序不重复的概念
     HashSet



注意
    Collection 接口存储一组不唯一,无序的对象
    List 接口存储一组不唯一,有序(插入顺序)的对象
    Set 接口存储一组唯一,无序的对象
    Map接口存储一组键值对象,提供key到value的映射

List
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效率比较高
书籍管理系统中
    采用LinkedList对书籍增加删除操作
    修改和查找书籍使用ArrayList

例子1:
Student(String name,int age){
        this.name=name;
        this.age=age;
    }
Student stu1=new Student("张三", 15);
        Student stu1=new Student("张三",15);
        Student stu2=new Student("李四",15);
        Student stu3=new Student("王五",15);
        Student stu4=new Student("测试",15);
        List<Student> list=new ArrayList<Student>();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        System.out.println(list.size());


例子2:
Student s=(Student)list.get(i);------报错,强制转换为Student类型,如果使用泛型规定好类型,就不需要强制转换


把任何类型对象通过add(Object obj) 放入List中,认为只是Object类型
通过get(int index) 取出List中元素时必须进行强制类型转换,繁琐而且容易出现异常
使用Map的put(Object key, Object value)和get (Object key)存取对象时存在同样问题
JDK5.0中通过引入泛型有效的解决了这个问题
JDK5.0使用泛型改写了集合框架中的所有接口和类




例子3:
打印出存储在Student的list中的学生姓名

清空集合list.clear();
删除指定位置的学生,如第一个list.remove(index); list.remove(object);
删除指定的学生,如删除张三对象
    循环中找到姓名为张三的对象
判断集合中是否包含指定
list.contains(object)
在指定位置添加对象
list.add(1, stu4);


插入、删除操作频繁时,可使用LinkedList来提高效率
LinkedList还额外提供对头部和尾部元素进行添加和删除操作的方法
例子1
LinkedList<Student> list=new LinkedList<Student>();
        list.add(stu1);
        list.add(stu2);
        list.addFirst(stu3);
        list.addLast(stu4);


例子2
删除头处
list.removeFirst();   list.removeLast();--删除尾部    

list.getFirst().getName()--获得首部




Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
 最常用的实现类是HashMap

例子1:添加
Map<String, String> countries =new HashMap<String, String>();
    countries.put("四川", "成都");
    countries.put("四川", "绵阳");
    countries.put("四川", "宜宾");
    countries.put("四川", "乐山");
例子2:
获得指定元素的值
String address=countries.get("四川");
    System.out.println(address);
这时候只会打印乐山-----被覆盖了(key,value)
例子3:
countries.size()-----获得map里边元素的个数
countries.remove()----删除指定元素
countries.containsKey()

countries.keySet()----获得所有map里边的key
countries.values()----获得所有map里边的value






Vector和ArrayList的异同
实现原理相同,功能相同,很多情况下可以互用
两者的主要区别如下
Vector线程安全,ArrayList重速度轻安全,线程非安全
长度需增长时,Vector默认增长一倍,ArrayList增长50%

Hashtable和HashMap的异同
实现原理相同,功能相同,在很多情况下可以互用
两者的主要区别如下
Hashtable继承Dictionary类,HashMap实现Map接口
Hashtable线程安全,HashMap线程非安全
Hashtable不允许null值,HashMap允许null值



元素遍历·
所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历
Collection 接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素

Iterator it = dogs.iterator();
        while (it.hasNext()) {
            Student stu= it.next();
            System.out.println(stu.getName()+"\t"+stu.getStrain());
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值