Java学习:集合类

集合

我们之前学习过数组,我们编写的多数程序也都用到了数组,但有时我们发现有是数组并不能满足我们的所有需求,这是我们就要用到集合。

集合与数组的区别:

数组:
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():返回集合中元素的个数

练习代码如下

 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         }
把Dog对象添加到集合并用迭代器遍历

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集合练习代码如下

 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         }
迭代器、for循环和增强for循环

ArrarList和LibkedList集合:为实现了List接口的集合类。

相同点:有顺序的,元素可以重复
(1)ArrayList特点:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
(2)LinkedList特点:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高

原文地址:https://www.cnblogs.com/shaofanglazi/p/6807697.html