集合
我们之前学习过数组,我们编写的多数程序也都用到了数组,但有时我们发现有是数组并不能满足我们的所有需求,这是我们就要用到集合。
集合与数组的区别:
数组:
1.长度固定
2.可以存储基本类型,也可以存储引用类型
3.存储元素类型一致
集合:
1.长度可变
2.只可以存储引用类型
3.可以存储多种类型
集合类的体系结构图
在这里我们目前主要学习Collection类、List类、ArraryList类、LinkedList类。
Collection类
成员方法:()
A:添加功能
boolean add(Object obj):往集合中添加一个元素
boolean addAll(Collection c):往集合中添加多个元素
B:删除功能
void clear():清空所有元素
boolean remove(Object o):从集合中删除一个元素
boolean removeAll(Collection c):从集合中删除另一个集合的元素
C:判断功能
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含另一个集合的元素
boolean isEmpty():判断集合是否为空。
D:交集功能
boolean retainAll(Collection c)
E:迭代器(集合特有的遍历方式)
Iterator iterator()
重点:Iterator的使用
1、使用步骤
2、迭代器原理
迭代器:
Iterator iterator()
Object next():返回迭代的下一个元素,并移动指向的位置
boolean hasNext():判断是否有元素
NoSuchElementException:没有这样的元素异常。
原因是:你已经获取到元素的末尾了,你还要继续获取元素,已经没有了,所以就报错了。
解决方案:应该在拿之前判断一下是否有元素。
迭代器遍历集合:
迭代器是依赖于集合而存在的。所以,要想得到迭代器对象,必须先有集合对象。
迭代步骤:
1):通过集合对象获取到迭代器对象
2):通过迭代器对象的hasNext()方法判断是否有元素
3):通过迭代器对象的next()方法获取元素
F:长度功能
int size():返回集合中元素的个数
练习代码如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //1.创建dog对象 2 Dog d1 = new Dog("小黑", 1, "藏獒"); 3 Dog d2 = new Dog("小黄", 1, "金毛"); 4 Dog d3 = new Dog("小白", 2, "萨摩耶"); 5 6 //2.创建集合 7 Collection c = new ArrayList(); 8 9 //3.将dog对象添加到集合 10 c.add(d1); 11 c.add(d2); 12 c.add(d3); 13 14 //4.获取迭代器对象,该集合对应的迭代器对象 15 Iterator it = c.iterator(); 16 17 // 5.调用方法进行遍历 18 while (it.hasNext()) { 19 Dog d = (Dog) it.next(); 20 System.out.println(d.getName()+" "+d.getAge()+" "+d.getType()); 21 }
List类
List集合的元素有序(储存和取出顺序一致),元素可重复。
List的特有功能:
A:添加功能
void add(int index,Object obj):在指定的位置添加元素
B:删除功能
Object remove(int index):通过指定的索引删除元素,并把删除的元素返回
C:获取功能
get(int index) 返回列表中指定位置的元素。
D:替换功能
Object set(int index,Object obj)
List的倒序与洗牌
List中元素顺序可以被洗牌Collections.shuffle(list)
List中元素顺序可以被倒序Collections.reverse(list)
Collections.sort(list)对List元素排序(字母数字分别进行测试)
List集合练习代码如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //创建学生对象 2 Student s1 = new Student("大明", 20); 3 Student s2 = new Student("二明", 18); 4 Student s3 = new Student("三明", 16); 5 Student s4 = new Student("小明", 15); 6 7 //创建List集合 8 List list = new ArrayList(); 9 10 //给集合中添加元素 11 list.add(s1); 12 list.add(s2); 13 list.add(s3); 14 list.add(s4); 15 16 //普通for循环进行遍历 17 for(int i=0;i<list.size();i++){ 18 Object object = list.get(i); 19 Student s = (Student)object; 20 System.out.println(s.getAge()+" "+s.getName()); 21 } 22 23 System.out.println("-----------"); 24 //获取迭代器对象 25 Iterator it = list.iterator(); 26 while (it.hasNext()) { 27 Object obj = it.next(); 28 Student s = (Student)obj; 29 System.out.println(s.getAge()+" "+s.getName()); 30 } 31 32 System.out.println("------------"); 33 //使用增强for循环遍历集合 34 for(Object obj:list){ 35 Student s= (Student)obj; 36 System.out.println(s.getAge()+" "+s.getName()); 37 }
ArrarList和LibkedList集合:为实现了List接口的集合类。
相同点:有顺序的,元素可以重复
(1)ArrayList特点:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
(2)LinkedList特点:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高