慕课网学习之Java集合框架

首先说一下我对集合的认识,集合就相当于是一个数组,而这个数组的元素类型是可以自己定义的,某个特定的集合有一些特殊的特点,长度是动态变化的,这点相对于数组长度是固定的要好。
集合的作用:
  1.在类的内部,对数据进行组织;
  2.简单而快速地搜索大量数量的条目;
  3.有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速地插入或者删除有关元素;
  4.有的集合接口,提供了映射关系,可以通过关键字(可以)去快速查找到对应的唯一对象,而这个关键字可以使任意类型。
集合的长度:可以动态变化。
集合的组成:
Collection接口
  是List,Set和Queue接口的父接口,List,Set和Queue是接口不能直接实例化
  定义了可用于操作List,Set和Queue的方法--增删改查
List接口及其实现类--ArryList
 1. List是元素有序并且可以重复的集合,被称为序列
  2.List可以精确的控制每个元素的插入位置,或删除某个位置元素
  3.ArrayList--数组序列,是List的一个重要实现类
  4.ArrayList底层是由数组实现的
  5.使用
   (1)创建
        List lt=new ArrayList();//List是接口不能直接实例化,所以要用它的子类进行实例化
    (2)添加元素
        lt.add(元素);//添加一个元素
        lt.add(index,元素);//在index位置添加一个元素
        lt.addAll(元素);//添加一个元素数组
        例:Course[] course={new Course("3","离散数学"),new Course("4","汇编")};
               coursesToSelect.addAll(Arrays.asList(course));//public List coursesToSelect,所以把数组转化为List
        lt.addAll(index,元素)//在index位置上添加一个元素数组
        例:Course[] course2={new Course("5","高等数学"),new Course("6","Java")};
                coursesToSelect.addAll(2,Arrays.asList(course2));
    6.查询
        得到List的长度:int size=coursesToSelect.size();
        遍历这个List可以用for循环一个一个的遍历:
            for(int i=0;i<size;i++){
                  Course cr=(Course)coursesToSelect.get(i);
                  System.out.println(i+": "+cr.getid()+cr.getname());
            }
        通过迭代器遍历:
            Iterator it=coursesToSelect.iterator();
            System.out.println("通过迭代器访问:");
            while(it.hasNext()){
               Course cr=(Course)it.next();
               System.out.println("课程:"+cr.getid()+cr.getname());
            }
        通过for each遍历
            for(Object obj:coursesToSelect){
                   Course cr=(Course)obj;
                    System.out.println("课程:"+cr.getid()+cr.getname()); 
        }
    7.修改
       coursesToSelect.set(0, new Course("7","毛概"));//把0位置上的元素改为 Course("7","毛概")
    8.删除
      以某个元素为依据进行删除:
             Course cr=(Course)coursesToSelect.get(0);
             coursesToSelect.remove(cr);
      以位置为依据进行删除:
             coursesToSelect.remove(0);
      删除多个元素:
            Course[] courses={(Course)coursesToSelect.get(0),(Course)coursesToSelect.get(1)};
            coursesToSelect.removeAll(Arrays.asList(courses));
我们已经说了这么多了,有没有发现我们根本没有规定这个集合里面放的元素是什么类型的,那能放什么类型的呢?因为这里我们并没有规定集合存放的数据类型,所以我们可以放很多类型的数据,但是一般情况下,我们创建一个集合就是想要存放相同的数据类型,这就用到了泛型。接下来我们说一下泛型的使用。
1.创建
    创建和有些像c++里面的向量的声明:public List<Course> Courses=new ArrayList<Course>();
在创建时直接就声明这个集合要承载的数据的数据类型。
其他的和不明确声明是什么类型大致是一样的,泛型还有一点不一样的就是,从泛型集合中取出元素是它不再是object类型了,它声明是什么类型那么他取出来时就是什么类型的。
Set接口及其实现类--HashSet
 *Set是元素无序并且不可重复的集合,被称为集
 *HashSet--哈希集,是Set的一个重要实现类
因为Set是无序的,所以不能根据特定位置访问某个元素或者修改某个元素。
Map接口
 *Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value
 *Map中的键值对以Entry类型的对象实例形式存在
 *键(key值)不可重复,value值可以
 *每个键最多只能映射到一个值
 *Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法
 *Map支持泛型,形式如:Map<K,V>
HashMap类
 *HashMap是Map的一个重要的实现类,也是最常用的,基于哈希表实现
 *HashMap中的Entry对象是无序排列的
 *Key值和value值都可以为null,但是一个HashMap只能有一个key值为null的映射(key值不可重复)
 创建:public Map<String,Student>students=new HashMap<String,Student>();
 添加元素:put(key,value);
keySet()方法就是把Map中的所有key值映射到一个Set集合中
get(key)方法就是通过key值得到对应的value值
remove(key)通过key值删除该元素
通过entrySet遍历Map中元素:
Set<Entry<String,Student>>entrySet=students.entrySet();
  for(Entry<String,Student> entry:entrySet){
   System.out.println("去的键:"+entry.getKey());
   System.out.println("对应的值为:"+entry.getValue());
  }
修改:
通过put()方法,这时key值就是已经存在的

List的contains(元素)方法:判断集合中是否包含某个元素,若包含则返回true,否则返回false
contains方法的实现原理:遍历集合中的每一个元素,然后调用equals方法进行比较。
List的indexOf()方法:寻找特定元素在集合中的索引位置,实现原理:从第一个元素遍历集合,并调用equals方法与一直元素比较如果相等则返回当前索引位置,所以当集合中有多个一样的元素是只返回第一个元素的位置;相反的还有一个是lastIndexOf(),返回最后一次出现的索引位置。这两个方法,当找不到元素时都返回-1。

Map的containsKey(key)判断集合中是否包含此key值,containsValue(value)判断是否包含此value值。

Collections工具:
 *sort()方法:Collections.sort(集合名称),就将该集合进行排序了。
 

注意:
对象存入集合都变成object类型,取出时需要类型转化。
在使用集合时,若使用泛型,则存入集合时的对象只能是泛型声明时的类型或其子类型,存放其他类型时会报错,取出时的类型则为声明时规定的类型。
在子类继承父类时,子类会调用父类的无参构造器,若父类没有无参构造器就会报错。
在使用泛型时不能使用基本数据类型声明,若要使用需要使用其包装类型。例如:public List<Integer> lt=new ArrayList<Interger>();




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值