8、Java入门—集合框架(上)

集合的概念:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象

集合的作用
1、在类的内部,对数据进行组织;简单而快速的搜索大数量的条目;
2、有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素;
3、有的集合接口,提供了映射关系,可以通过关键字去快速查找对应的唯一对象,而这个关键字可以是任意类型

集合和数组有些类似  但是集合比数组更加的强大,集合好比金箍棒数组好比打狗棍,金箍棒想长就长打狗棍做出来多长就多长。

集合长度不限,数组长度固定
数组只能同下标访问元素,类型固定只能通过遍历数组来查找元素。而有的集合可以通过任意类型查找所映射的具体对象。

集合框架结构


Collection 单身狗
Map 情侣狗

List,Queue,排列有序并且可重复
Set,无序且不可重复
常用:List  Set

collection接口
是List、set和Queue接口的父接口
定义了可用于操作List、Set和Queue的方法——增删改查
1)List接口及其实现类——ArrayList
    List是元素有序并且可以重复的集合,被称为序列
    List可以精确的控制每个元素的插入位置,或删除某个元素位置
    ArrarList——数组序列,是List的一个重要实现类
    ArrayList底层是由数组实现的

Collection:集合层次中的根接口,JDK没有提供这个接口的直接实现类。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection子接口ListSet
Set:不能包含重复的元素,子接口SortedSet是一个按照升序排列的元素的Set。

Set是一个接口不能直接实例化,要用一个实现类HashSet来实现属性的初始化
List:可以包含重复的元素,是一个有序的集合,提供了按索引访问的方式,有次序,位置不改变

List是一个接口不能直接实例化,要用一个实现类ArrayList来实现属性的初始化

对象存入集合都变成Object类型,取出时需要进行强制类型转换

当前list长度为2,可以访问的位置只有0,1.,add方法就是在可以访问的位置上将元素插入,而原来位置上和这位置之后的元素都往后错一位。如果传入的index等于当前list的容量即为2,则会在当前list的队尾插入元素。当访问的位置大于(>2)或小于(<0)list长度时,就会报数组下标越界异常(IndexOutOfBoundsException)。

list集合:add(element)还有add(index,element)
          addAll(elements)还有addAll(index,elements)这边的elements元素可以添加集合进来,代码表示为:Arrays.aslist(obj)

1、可以通过addAll()方法将某类的对象数组(实例数组)添加到List中
2、由于addAll()的参数为Collection类型,因此需要将对象数组(作为参数)转换成List类型,可以通过Arrays.asList()方法将数组转换成List。
3、无论是add()方法还是addAll()方法,都可以在List指定位置插入新元素或新数组

以数组的形式向List中添加元素://数组形式,一次插入多个元素,将数组内容转变为List型
ArraysType[] ArraysName = {new ArraysType(), new ArraysType,...};//这是一种类似于C++中的结构体的用法
ListName.addAll(Arrays.asList(ArraysName));//将上述数组整体添加到List中
//ListName.addAll(Arrays.asList(index,ArraysName));//这是addAll()函数的另外一种用法,在指定位置插入
addAll中添加的是Collection的一个实例(Collection c);asList是将数组转换为List类型

list.get(index)获得指定位置的对象。

如果在指定中间位置index插入多个对象,即ddAll(index,elements),elements从index依次顺序向下存放。

ArrayList——查询


方法一:


int size=new ArrayList().size();


for(int i=0;i<size;i++){
Course cr=new ArrayList().get(i);
cr.id...;
}


方法二:(迭代器)[Ps:迭代器不能存储,只能遍历,是依赖于集合而存在的,不能独立存在]


Iterator it=new ArrayList().iterator();


while(it.hasNext()){
Course cr=it.next();
cr.id...;
}


or //for each方法即增强的for循环


for(Object obj:new ArrayList()){
Course cr=(Course)obj;
//这里使用Object是因为“对象存入集合都变成Object类型,取出时需要类型转换”。
cr.id...;
}

ArrayList——修改


new ArrayList().set(int index,E element);


Ps:index - 要替换的元素的索引,element - 要在指定位置存储的元素

List中删除数据元素可以使用remove和removeAll方法
 其中remove方法是删除指定位置的单个元素,removeAll是删除多个元素
例:
1(remove方法):
  Course cr = (Course)courseList.get(想要删除的元素位置);
  courseList.remove(cr);
2(removeAll方法):
 Course[] cr = {(Course)(courseList.get(指定位置)),(Course)(corseList.get(5))};
courseList.removeAll(cr);
3:如果要对List中多个元素进行删除操作时,可以先将要操作的元素去除放在一个数组中,然后利用Arrays工具(数组名)方法进行操作
例:
 Course[] cr = {(Course)(courseList.get(3)),(Course)(courseList.get(6))};
courseList.removeAll(Arrays.asList(cr));


集合中的元素,可以是任意类型的对象(对象的引用)
    如果把某个对象放入集合,则会忽略他的类型,而把他当做Object处理
泛型则是规定了某个集合只可以存放特定类型的对象
    会在编译期间进行类型检查,可以直接按指定类型获取集合元素

使用:
  List<myType> myTypeList;//myType表示泛型元素的类型
  myTypeList = new ArrayList<myType>();

  1.集合再插入元素时会忽略元素本身的类型,而把他们都看成是Object类型,取出时需要把该元素进行强制类型转换,变成对应的类型即可。

2.泛型规定了容器内的元素类型,会对除容器以外的元素类型进行报错提醒,泛型定义为List<元素类型>;
例:(使用泛型)
List(Course)courses;
在构造方法中(实例化的时候也可以不在构造方法中,直接实例就好)
this.courseList = new ArrayList<Course>();
3、在运用了泛型后,用foreach语句的时候,存储变量应该为泛型的类型
例:for(Course cr : courses){   }

泛型集合中,不能添加泛型规定的类型及其子类型以外的对象,否则会报错!

泛型不能是基本类型的,得是引用类型的

泛型用基本类型可以用包装类,比如Integer、Long、Boolean

Set接口及其实现类--HashSet
Set是元素无序并且不可以重复的集合,被称为集
HashSet--哈希集,是Set的一个重要实现类


注意:
  1.Set中不提供set()方法来修改集合中的元素
  2.遍历Set时不能使用get()方法来获取指定下标的元素,因为Set是无序的,只能使用foreach或iterator方法来遍历
  3.遍历Set的元素的次序不是唯一的

4.set中元素不可重复,无论添加多少次它只会保留一个引用。

5.set可以添加空对象null

Java中迭代器的使用

由于Java中数据容器众多,而对数据容器的操作在很多时候都具有极大的共性,于是Java采用了迭代器为各种容器提供公共的操作接口。

使用Java的迭代器iterator可以使得对容器的遍历操作完全与其底层相隔离,可以到达极好的解耦效果。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值