java--集合(1)--黑马程序员

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

集合(1)

主要内容:《 数组的局限性、Collection接口的结构和基本方法、批量操作、遍历、迭代器、list接口、list接口方法、ArrayList、Vector 》

1.数组的局限性

当我们面向对象编程时,总要处理大量的对象;
  1.处理大量对象,可以使用"数组"存储;
  2.但数组有很多的局限性:
     1).数组的长度一旦确定,后期不能更改;我们程序员可以定义新的数组,但是每次做这样的操作都很费事;
     2).数组在定义时,指定了"数据类型",那么这个数组就只能装这个数据类型的,不能装其它类型的。
 
   3.以上的两个局限性,对于我们程序员来说,在操作大量对象时,就非常的不方便。 所以这时,Java为我们提供了一种"工具"。它类似于"仓库",可以用来存             储大量的"引用"。
    
 这种"仓库"就是:"集合类";
   特点:
   1).对于我们程序员来说,就像一个"无底洞",可以装无数的"引用";我们不用关心"长度"信息;
   2).这些"集合类"可以装任何"引用数据"类型的数据;

2.Collection接口的结构

3.Collection接口的基本方法

1.添加:
   boolean add(Object e):将元素e的引用添加到集合中;如果此 collection 由于调用而发生更改,则返回 true。(
 2.删除
   boolean remove(Object o):将元素o从集合中删除。删除第一个匹配的元素,之后就返回;
   void clear():清空集合
 3.获取:
   boolean contains(Object o):查找集合中的元素o,如果有:返回true,否则返回false;内部使用equals()进行判断;
   boolean isEmpty():判断集合是否为空:
   int size():获取集合的大小;

使用子类:ArrayList

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合
 4         Collection list = new ArrayList();
 5         //2.boolean add(Object e):填充集合
 6         System.out.println(list.add("刘德华"));
 7         System.out.println(list.add("刘德华"));
 8         System.out.println(list.add("张学友"));
 9         System.out.println(list.add("刘亦菲"));
10         System.out.println("打印集合:"  + list);
11
12         //3.boolean remove(Object o):将元素o从集合中删除
13         //从集合中移除"张学友"
14         /*
15         list.remove("张学友");//内部使用:equals()方法进行逐个判断。如果为true,则认为是相同元素,就执行删除
16         System.out.println("移除张学友后,打印集合:"  + list);
17         */
18         /*
19         list.remove("刘德华");
20         System.out.println("移除1刘德华后,打印集合:"  + list);
21         list.remove("刘德华");
22         System.out.println("移除2刘德华后,打印集合:"  + list);
23         */
24         //4.void clear()
25         /*
26         list.clear();
27         System.out.println("清空集合后,打印集合:" + list);
28         */
29         //5.boolean contains(Object o):查找集合中的元素o,如果有:返回true,否则返回false;
30         //在集合中查找"刘德华"
31         System.out.println("集合中是否存在刘德华:" + list.contains("刘德华"));//true
32         System.out.println("集合中是否存在范冰冰:" + list.contains("范冰冰"));//false
33         //6.boolean isEmpty():判断集合是否为空:
34         System.out.println("集合是否为空:" + list.isEmpty());
35         System.out.println("集合大小:" + list.size());
36         list.clear();
37         System.out.println("清空集合后,集合是否为空:" + list.isEmpty());
38         System.out.println("清空集合后,集合大小:" + list.size());
39     }
40 }

4.Collection的一些批量操作的方法:

boolean addAll(Collection c):将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 * boolean removeAll(Collection c):移除此collection 中那些也包含在参数collection 中的所有元素(可选操作)。

boolean containsAll(Collection c):如果此 collection 包含指定 collection 中的"所有元素",则返回 true。

boolean retainAll(Collection c):移除此 collection 中未包含在指定 collection 中的所有元素。

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //定义两个集合
 4         Collection list1 = new ArrayList();
 5         list1.add("刘德华");
 6         list1.add("张学友");
 7         list1.add("刘亦菲");
 8
 9         Collection list2 = new ArrayList();
10         list2.add("马云");
11         list2.add("柳传志");
12         list2.add("马化腾");
13
14
15         //1.boolean addAll(Collection c)
16     /*
17         list1.addAll(list2);
18         System.out.println(list1);
19         System.out.println(list2);
20     */
21         //2.boolean removeAll(Collection c)
22         /*
23         list1.removeAll(list2);
24         System.out.println("list1 = " + list1);
25         System.out.println("list2 = " + list2);
26         */
27         //3.boolean containsAll(Collection c)
28         /*
29         System.out.println(list1.containsAll(list2));
30         */
31         //4.boolean retainAll(Collection c)
32         list1.retainAll(list2);
33         System.out.println("list1 = " + list1);
34         System.out.println("list2 = " + list2.toString());
35     }
36 }

5.collection的遍历

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.定义集合
 4         Collection list = new ArrayList();
 5         //2.填充集合
 6         list.add("刘德华");
 7         list.add("张学友");
 8         list.add("郭富城");
 9         list.add("黎明");
10
11         //3.遍历集合
12     //    System.out.println(list);//这不是遍历,是获取一个String
13         Object[] objArray = list.toArray();
14         for(int i = 0 ;i < objArray.length ; i++){
15             String s = (String)objArray[i];
16             System.out.println(s);
17         //    System.out.println(objArray[i]);//调用Object-->toString()
18         }
19     }
20 }

6.Collection存储自定义对象

 1 import java.util.ArrayList;
 2 import java.util.Collection;
 3
 4 public class Demo {
 5     public static void main(String[] args) {
 6         //1.定义集合
 7         Collection list = new ArrayList();
 8         //2.填充集合
 9         /*
10         Cat c1 = new Cat("波斯猫",2,‘雌‘);
11         list.add(c1);
12         */
13         list.add(new Cat("波斯猫",2,‘雌‘));
14         list.add(new Cat("折耳猫",3,‘雄‘));
15         list.add(new Cat("熊猫",4,‘雌‘));
16         list.add(new Cat("大脸猫",2,‘雄‘));
17
18         //3.遍历集合
19         Object[] objArray = list.toArray();
20         for(int i = 0 ;i < objArray.length ; i++){
21             Cat c = (Cat)objArray[i];
22             System.out.println(c.getName() + "," + c.getAge() + "," + c.getSex());
23         }
24
25     }

7.Collection遍历集合_迭代器

Collection集合的遍历方式二:

迭代器:

Iterator iterator():

java.util.Iterator(接口):
 成员方法:
 boolean hasNext() 如果仍有元素可以迭代,则返回 true。

Object next() 返回迭代的下一个元素。

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合类;
 4         Collection list = new ArrayList();
 5         //2.填充集合
 6         list.add("张三");
 7         list.add("李四");
 8         list.add("王五");
 9         list.add("周六");
10         //3.使用迭代器遍历
11         Iterator it = list.iterator();
12         /*
13         Object obj = it.next();
14         System.out.println(obj);
15         obj = it.next();
16         System.out.println(obj);
17         obj = it.next();
18         System.out.println(obj);
19
20         System.out.println(it.hasNext());
21         obj = it.next();
22         System.out.println(obj);
23
24         System.out.println(it.hasNext());
25     */
26         while(it.hasNext()){
27             String str  = (String)it.next();
28             System.out.println(str);
29         }
30
31     }
32 }

8.List接口存储字符串

Collection(接口)
  |--List(接口)
  |--ArrayList(类):
  |--Set(接口)
 
  此例:左边使用List类型接收。但仍然使用Collection中的方法。效果跟之前是一样的。

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合对象
 4         List list = new ArrayList();
 5         //2.填充集合
 6         list.add("张三");
 7         list.add("李四");
 8         list.add("王五");
 9         list.add("周六");
10         //3.遍历集合
11         //方式一:toArray()
12         Object[] objArray = list.toArray();
13         for(int i = 0;i < objArray.length ; i++){
14             String str = (String)objArray[i];
15             System.out.println(str);
16         }
17         System.out.println("*************************");
18         //方式二:使用迭代器
19         Iterator it = list.iterator();
20         while(it.hasNext()){
21             String s = (String)it.next();
22             System.out.println(s);
23         }
24
25     }
26 }

9.List接口的特有方法

List接口中增加了一些特有功能,使其具有一些特性:
  1.有序的(取出时的顺序跟存入时的顺序是一样的);
  2.可以存储重复的元素;
  
  特有的成员方法:
    void add(int index,E element):在列表的指定位置插入指定元素(可选操作)。原index位置上的元素后移。
    E remove(int index):移除列表中指定位置的元素(可选操作)。
    E get(int index):获取index位置上的元素;
    E set(int index,E element):将index位置上的元素替换为element。
    ListIterator listIterator():特有的遍历迭代器
  
    interface Collection{
    boolean add(Object obj);
    }
    interface List extends Collection{
    void add(int index,Object element);
    }
    

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合
 4         List list = new ArrayList();
 5         //2.填充集合:使用Collection --> add(Object obj):
 6         list.add("刘德华");
 7         list.add("张惠妹");
 8         list.add("刘亦菲");
 9         //使用List-->add(int index,Object obj)添加
10         list.add(1,"周星驰");
11
12         System.out.println("插入后:" + list);
13
14         //3.E remove(int index)
15         //移除周星驰
16         list.remove(1);
17         System.out.println("移除周星驰后:" + list);
18         //4.E get(int index)
19         //获取索引为1的
20         Object obj = list.get(1);
21         System.out.println("获取索引为1的:" + obj);
22
23         //5.E set(int index,E element)
24         //将索引为1的,替换为"周星驰"
25         list.set(1, "周星驰");
26         System.out.println("替换后:" + list);
27
28     }
29 }

10.List(接口)的特有迭代器:

ListIterator listIterator():一个可以向前遍历的迭代器;
  注意:当使用此迭代器向前遍历时,一定要先向后遍历。
 
 
  Iterator和ListIterator的区别:
    1.Iterator是父接口:
      Iterator是单向的,只能向下遍历;
 
    2.ListIterator是Iterator的子接口;
      ListIterator是双向的,可以向前遍历;

class ArrayList implements List{必须重写Collection接口的方法,必须重写List中的方法}

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合
 4         List list = new ArrayList();
 5         //2.填充集合
 6         list.add("张三");
 7         list.add("李四");
 8         list.add("王五");
 9
10         //3.使用ListIterator迭代
11         ListIterator listIt = list.listIterator();
12         while(listIt.hasNext()){
13             String str = (String)listIt.next();
14             System.out.println(str);
15         }
16
17         System.out.println("*************向前遍历************");
18         //向前遍历
19         while(listIt.hasPrevious()){
20             String str = (String)listIt.previous();
21             System.out.println(str);
22         }
23     }
24 }

11.使用ListIterator时的并发修改异常

当我们通过"迭代器"遍历时,通过list的引用去修改集合内容时,会产生一个异常:ConcurrentModificationException。
 
 所以:
  当通过迭代器遍历时,如果想修改,就通过迭代器修改;
  当使用list遍历时,如果想修改,可以通过list修改;

public class Demo {
    public static void main(String[] args) {
        //1.实例化一个集合
        List list = new ArrayList();
        //2.填充集合
        list.add("刘德华");
        list.add("张学友");
        list.add("郭富城");

        //3.遍历集合
        ListIterator listIt = list.listIterator();
        while(listIt.hasNext()){
            String str = (String)listIt.next();
            System.out.println(str);
            if(str.equals("张学友")){
                //通过ListIterator向集合中添加一个元素
                listIt.add("周星池");//OK的
            //    list.add("周星驰");//运行时异常:ConcurrentModificationException
            }

        }

    }
}

12.List的三个子类的特点

1.ArrayList:数组实现;线程不安全的,效率高;
  2.Vector:数组实现;线程安全的,效率低;
  3.LinkedList:链表实现;线程不安全的,效率高

13.ArrayList存储字符串

Collection(接口)
 |--List(接口): 有序的;可以存储重复值;
 |--ArrayList(类):实现了所有List中的方法和Collection中的方法;

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合
 4         ArrayList list = new ArrayList();
 5         //2.填充集合
 6         list.add("aaa");//Collection中的方法
 7         list.add(0, "bbb");//List中的方法;
 8
 9         //3.获取迭代器
10         Iterator it = list.iterator();//Collection中的方法
11         ListIterator listIt = list.listIterator();//List中的方法;
12
13         while(it.hasNext()){
14             System.out.println(it.next());
15         }
16     }
17 }

14.List特有的遍历方式

之前遍历集合的方式:
   1.Collection --> toArray():
  2.Collection --> iterator():
  
   List接口,可以结合两个方法,进行遍历:
   3.Collection --> size();
   List --> get(int index):
   使用for循环:
  for(int i = 0;i < list.size();i++){
   System.out.println(list.get(i));
 }

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合
 4         List list = new ArrayList();
 5         //2.填充集合
 6         list.add("藏獒");
 7         list.add("金毛");
 8         list.add("吉娃娃");
 9         list.add("黑贝");
10         //3.遍历
11         for(int i = 0;i < list.size() ; i++){
12             System.out.println(list.get(i));
13         }
14     }
15 }

15.Vector特有功能

Collection(接口)
  |--List(接口):
  |--ArrayList(类):
  |--Vector(类):
  特有方法:
   public void addElement(E obj):添加一个元素;
   public E elementAt(int index):返回指定索引处的引用;
  
  

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合
 4         Vector vec = new Vector();
 5         //2.填充集合
 6         vec.add("波斯猫");
 7         vec.add("折耳猫");
 8         vec.add("加菲猫");
 9         vec.add("暹罗猫");
10
11         //3.遍历集合
12         for(int i = 0;i < vec.size() ; i++){
13             //使用List的get方法;
14         //    String str = (String)vec.get(i);
15             //使用Vector特有的方法
16             String str = (String)vec.elementAt(i);
17             System.out.println(str);
18         }
19     }
20 }

16.LinkedList特有功能

Collection:
   |--List:
   |--ArrayList:
   |--Vector:
   |--LinkedList:
  
  LinkedList类的特有功能:
 
   public void addFirst(E e):将元素e添加到第一个位置上。原位置上的元素依次后移;可以模拟"栈"结构;
   addLast(E e):将元素e添加到末尾。
   public E getFirst()及getLast():获取第一个元素和最后一个元素;
   public E removeFirst()及public E removeLast():删除第一个元素和最后一个元素;

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合
 4         LinkedList list = new LinkedList();
 5         //2.填充元素:
 6         list.addFirst("aaa");
 7         list.addFirst("bbb");
 8         list.addFirst("ccc");
 9         //3.遍历元素:
10         for(int i = 0;i < list.size() ; i++){
11             System.out.println(list.get(i));
12         }
13         //4.获取第一个元素
14         System.out.println("第一个元素:" + list.getFirst());
15         System.out.println("最后一个元素:" + list.getLast());
16         //5.删除元素
17         System.out.println("删除第一个元素:"  + list.removeFirst());
18         System.out.println("删除后的集合:" + list);
19         System.out.println("删除最后一个元素:" + list.removeLast());
20         System.out.println("删除后的集合:" + list);
21
22     }
23 }

17.去除ArrayList中重复字符串元素

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //1.实例化一个集合
 4         ArrayList list = new ArrayList();
 5         //2.填充集合
 6         list.add("aaa");
 7         list.add("bbb");
 8         list.add("ccc");
 9
10         list.add("aaa");
11         list.add("aaa");
12
13         //3.打印集合
14         System.out.println("list = " + list);
15
16         //*****去除集合中的重复元素******
17         //方式一:使用新集合
18         ArrayList list2 = new ArrayList();
19         //1.遍历原集合
20         for(int i = 0;i < list.size() ;i++){
21             String str = (String)list.get(i);
22             if(!list2.contains(str)){//如果在list2中不存在
23                 list2.add(str);
24             }
25         }
26         //2.遍历新集合
27         System.out.println("新集合:" + list2);
28         //方式二:直接操作原集合
29         System.out.println("原集合:" + list);
30         //1.遍历原集合
31         for(int i = 0;i < list.size() ;i++){
32             String str = (String)list.get(i);
33             //将每个元素,与它后面的其它元素进行比较,如果有相同的。删除后面相同的元素
34             for(int j = i + 1 ; j < list.size() ; j++){
35                 String str2 = (String)list.get(j);
36                 if(str.equals(str2)){
37                     //删除后面的元素
38                     list.remove(j);
39                     //删除元素后,集合的大小会发生变化。要保存j的一直性;
40                     j--;
41                 }
42             }
43         }
44         //2.打印集合
45         System.out.println("去重后,集合内容:"  + list);
46
47     }
48 }
时间: 2024-10-07 05:25:01

java--集合(1)--黑马程序员的相关文章

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

黑马程序员——Java集合工具类和泛型

Collections工具类和泛型 Collections和Collection Collections和Collection是不同的,Collections是工具类,用来操作集合的,而Collection是集合接口.Collections中有一系列的静态方法用来操作集合,但是不能更改集合内容.比如不能set()不能remove()元素,可以替换全部元素或者添加同一个元素. static List<String> list =Arrays .asList("one Two three

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

黑马程序员---Java集合框架

---------------------- Android开发.java培训.期待与您交流! ---------------------- Java集合框架 集合我们都知道是用来储存对象的容器,那之前的数组不也可以储存对象么,为什么要出现集合呢? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,然而集合类中提供很多方便操作对象存储的方法,要比数组更容易操作对象,而且集合的长度是可变的,然而数组长度确实固定不变的,这样不利于对对象的间隔储存.  数组和集

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员_关于黑马java班入学测试技术分享-后五(二)

??????????????????????????????????????????????????????????????????????????-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 作为本人首篇黑马技术博客有必要交代一下背景.个人理解博客的用作在于于己在于交流,于他在于学习,在交流学习中共同成长.下面进入正题.本文主要是介绍在做黑马入门测试时的一些问题(这个应该不是泄露题库吧). 本文只要是讲述黑马程序员基础测试题的6-10题,回过头来分析明显

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员——Java I/O流基础知识点(File类)

File工具 File类就是用俩将文件或者文件夹封装对象,弥补流对象的不足--流只能操作数据,不能操作文件夹的 封装的是路径!!! 构造方法演示 1.可以将已有的未出现的文件或者文件夹封装成对象. File f1=new File("c:\\abc\\a.txt"): File f2=new File("d:\\abc","ab.txt"打印,会打印路径.:目录分隔符,为了更好地跨平台File. File类常见功能 1,创建 createNewF