java基础第16天



集合概述


1 什么叫集合
  集合,也称为Java 类集,是一个动态的对象数组。它对一些实现好的数据结构进行
  了包装,从而使用起来更加方便。java中的集合类都在java.util包中。集合就是存储对象最常用的一种方式。


   


2 集合与数组的区别
  从存储的数据类型来看:
可以定义基本类型的数组,用来存储基本类型数据。也可以定义引用类型的数组,存储引用类型的数据;
集合只能存储引用类型,而不能存储基本类型。
  从长度来看:
数组一旦定义后,其长度就不能改变;
集合的长度会自动变化。


3 集合的功能
  集合可以存取元素!这是对容器的基本功能。
  集合还有很多对数据的操作方法,例如查看当前集合中是否包含某个元素、移除指定的元素等功能。


4 java全部集合类结构图






  不可能把每个类都学习了。
  
  其中加粗的是重点。
  细虚线矩形框:接口
  粗虚线矩形框:抽象类
  实线矩形框:类
  加粗实线矩形框:重点类
  
  实心三角箭头加虚线:可转换
  空心三角箭头加虚线:接口间的继承,或抽象类与接口间的实现
  空心三角箭头加实线:继承
  
  Comparable与Comparator:与排序相关接口
  Collections和Arrays:工具类(操作集合类与操作数组类)


追忆数组


1 基本类型数组使用




2 学生数组使用




3 数组的优缺点 
数组长度不可变
数组不能添加删除元素
数组没有操作方法(查看数组中某个元素是否存在等方法)
数组中的元素在内存中是邻居,索引速度天下无敌!


a b cd e f g hd 2
0 1 23 4 5 6 78 9


arr[3]
arr绑定的是arr[0]的地址
集合体系结构


1 学过哪些集合特性的类
  数组、StringBuffer、StringBuilder


2 为什么有那么多集合类
  每个集合类中有不同的数据存放方式,即数据结构不同。
  例如:水杯、书柜、大衣柜都是容器,它们内部存储物件的方式是不同的。
  这些集合类总会在某一个领域比较强,而在另一个领域比较弱。
  Java为我们提供了这么多集合类的目的就是,让我们在不同的环境下使用不同的集合。
  例如现在的手机也有音乐手机、照像手机等。


3 集合共性抽取
  无论是什么集合,它们都是集合。所以可以把集合的共性向上抽取,而形成一个体系。在Java集合中的根就是Collection。
  当我们学习了Collection的使用,那么就掌握了所有集合的基本操作。(学顶层,用底层)


4 Collection家族介绍






  这是我们要学习的Collection内容。


Collection功能介绍


添加功能
boolean add(Object o):添加元素,添加成功返回true。
boolean addAll(Collection c):添加一个集合中所有元素到当前集合对象中。
2 删除功能
boolean remove(Object o):移除元素,移除成功返回true。
boolean removeAll(Collection c):移除指定集合中所有元素,移除成功一个就返回true。
boolean retainAll(Collection c):只保留参数集合中的元素,即取交集。只要移除一个就返回true。
void clear():清空集合,使当前集合长度为0。


3 判断功能
boolean contains(Object o):判断当前集合中是否包含指定元素;
boolean containsAll(Collection c):判断当前集合中是否包含指定集合,只有都包含才返回true;
boolean isEmpty():判断当前集合是否为空,即长度为0。


4 元素个数(集合长度)
int size():获取当前集合中元素的个数


5 转换数组
Object[] toArray():把当前集合对象转换成Object数组。


6 遍历功能
Iterator iterator():获取当前集合的迭代器。
  注:什么是遍历:遍历就是把每个元素都访问一次
Collection功能测试
  使用ArrayList实现类
1 基本功能测试
boolean add(Object o)
String toString()
int size()
boolean isEmpty()
void clear()
boolean remove(Object o)
boolean contains(Object o)


2 参数为Collection类型的方法测试
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)




遍历集合


1 toString()是否算是遍历集合




2 把集合转换成Object[]数组,再遍历




3 Iterator接口介绍
boolean hasNext():判断当前是否还有下一个元素;
Object next():返回当前元素,让光标向下走
void remove():删除当前元素。你next()出来的元素就是你删除的元素。


4 Collection接口的iterator()方法介绍
  iterator() 方法返回的是Iterator接口类型。
  任何返回抽象类或接口类型的方法,返回的都是子类或实现类的对象。
  查看iterator()方法返回值的真实类型!
  你是否关心他的真实类型!


5 Iterator的next()方法出现异常
  在迭代器内部会有一个光标,这个光标默认是在第一个元素上。
  next()方法会返回当前光标指向的元素,而且next()方法会使光标向下移动。
  当已经没有元素时再去next()方法会出异常。


6 配合hasNext()来使用next()方法
  while(it.hasNext()) {
      it.next();
  }


7 不常用的remove()方法
  while(it.hasNext()) {
      String s = (String)it.next();
      if(“xxx”.equals(s)) {
          it.remove();
    }
  }


8 迭代器存在的意义
  集合类有很多,但它们的存储数据的方式不同。这说明遍历不同的集合使用的试也就不相同了。无论哪一种集合,都有返回Iterator对象的方法,不同的集合返回的Iterator对象内部的实现是不同的,但我们使用Iterator对象时却没有什么不同。


9 小心使用next()
  在每次调用next()之前都要调用hasNext()进行检测,以保证还有元素可以获取。如果连续调用next()就很可能出现异常。例如:
  while(it.hasNext()) {
      it.next();
      it.next()
  }


  注意:在每次next()之前必须hasNext()!


List概述
有序
可重复
有索引
1 什么是List
  有序的Collection,也叫序列(列表)。List是Collection的子接口!List保证元素存入的顺序!也可以包含重复元素。
  List与数组更加相似,因为List也有下标。不过List可以添加、移除元素,而且List的长度可以改变。
  Java中有两个List:
java.util.List:接口,这是我们要学习的List;
java.awt.List:类,这是GUI组件,不是集合。


2 把List当成Collection来使用
    List list = new ArrayList();
    list.add("hello");
    list.add("world");
    list.add("list");


    Iterator it = new list.iterator();


    while(it.hasNext()) {
        String str = (String)it.next();
        System.out.println(str);
    }


  因为List是Collection的子接口,所以可以把List当成Collection来使用。List中包含了所有Collection中的方法。


List特有功能


1 List特有功能介绍
void add(int index, Object o):在指定位置index上插入元素o;
boolean add(int index, Collection c):在指定位置index上插入集合c中所有元素。
Object get(int index):获取指定下标位置上的元素;
int indexOf(Object o):获取指定对象在当前集合中的位置;
int lastIndexOf(Object o):同上,但是倒着找;
ListIterator listIterator():返回列表迭代器,这是List独有的!
ListIterator listIterator(int index):返回列表迭代器,只是一段元素的迭代器;
Object remove(int index):移除指定下标位置上的元素,返回被移除的元素;
Object set(int index, Object o):设置指定下标位置上的元素,返回老值;
List sublist(int fromIndex, int toIndex):截取子 List,子列表从fromIndex到toIndex。


  因为List也是有索引的,所以很多方法都需要小心下标越界的问题!


2 List一般性方法使用
void add(int index, Object o)
Object remove(int index)
Object set(int index, Object o)
Object get(int index)
boolean add(int index, Collection c)
int indexOf(Object o)
int lastIndexOf(Object o)


问题:在集合类中,N多方法都依赖元素类型的equals()方法才能完成,所以我们必须把元素类型的equals()重写了。
boolean contains(Object o)
boolean remove(Object o)
3 遍历List
使用迭代器来遍历:Iterator it = list.iterator()
使用size()和get()来遍历。


4 获取子列表(subList()方法)
  获取子序列:List subList(int fromIndex, int toIndex)


ListIterator介绍


1 ListIterator是什么
  ListIterator列表迭代器,它是Iterator的子接口。当然它的功能要比Iterator多一些!只有通过List的listIterator()方法才能获取到ListIterator对象。
  列表迭代器是专门为迭代List面存在的!


2 把ListIterator当成Iterator来使用


List list = new ArrayList();
list.add("zhangSan");
list.add("liSi");
list.add("wangWu");
list.add("zhaoLiu");

ListIterator lit = list.listIterator();
while(lit.hasNext()) {
String str = (String)lit.next();
System.out.println(str);
}


3 使用ListIterator向前遍历
boolean hasPrevious():判断是否前一个元素;
Object previous():返回前一个元素;


4 使用ListIterator获取下标
int nextIndex():获取下一个元素的下标
int previousIndex():获取前一个元素的下标


5 ListIterator的添加、删除和设置方法
void add(Object o):添加元素!
void remove():删除元素!
void set(Object o):设置新值!


6 返回从指定位置开始的列表迭代器
ListIterator listIterator(int index)


写一个List,里面多放点字符串;
写一个程序,删除List中所有以s开始的字符串。


对List的添加与删除操作要小心
  添加和删除都会改变集合的长度。
1 生成子集的方法
Iterator iterator()
ListIterator listIterator()
List subList(int fromIndex, int toIndex)


2 怎么出现的异常
  当获取子集后
  对原集合进行了添加或删除操作
  然后再使用子集时就会异常。


3 避免异常的出现
  在获取子集之前或之后对原集合进行添加删除操作。
  对子集进行添加删除操作不会出异常。
  对子集进行操作就是对原集合进行操作!


其它功能


1 集合对象的toString()方法会调用元素对象的toString()方法




2 增强for与集合(简单了解一下)
  增强for:for(元素类型的变量 : 集合或数组对象) {}
  增强for的代码比较简捷,但功能不是很强大。强大的还是老for。
  老for可以做的事,新for不一定能行,但新for能做的,老for一定能做。
  
  
  
  难道真是除了数组和集合以外,其它东西就不能使用增强for来遍历了么?
  如果这个对象是可迭代的(实现了Iterable),那么就可以出现在新for中冒号的右边!
  因为只要你实现了Iterable,那么你一定有iterator方法,其实新for就是在使用迭代器来遍历的。


Words ws = new Words(“Hello world java css html xml”);
for(Object o : ws) {
  String w = (String)o;
  System.out.println(w);
}
/*
Hello
world
java
css
html
xml
*/






   
备注:null null 比较
是否相等?
Int s1;
Int s2;

先判断s1是否为空,如果为空在和s2比较




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值