黑马程序员-----集合框架类(一)

1.1 为什么出现集合类?

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

1.2 数组和集合类同是容器,有何不同?

数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。

1.3 集合类的特点

集合只用于存储对象

集合长度是可变的

集合可以存储不同类型的对象。

1.4 集合框架的构成及分类:

2.1 Collection接口:

Collection定义了集合框架的共性功能。
1,添加
add(e);
addAll(collection);

2,删除
remove(e);
removeAll(collection);
clear();

3,判断。
contains(e);
isEmpty();

4,获取
iterator();
size();

5,获取交集。
retainAll();

6,集合变数组。
toArray();

1,add方法的参数类型是Object。以便于接收任意类型对象。

2,集合中存储的都是对象的引用(地址)

2.1.2 迭代器:集合框架元素的取出方式

什么是迭代器呢?
其实就是集合的取出元素的方式。
如同抓娃娃游戏机中的夹子。

迭代器是取出方式,会直接访问集合中的元素。
所以将迭代器通过内部类的形式来进行描述。
通过容器的iterator()方法获取该内部类的对象。

示例1:

 1 class  CollectionDemo
 2 {
 3     public static void main(String[] args)
 4     {
 5
 6         method_get();
 7     }
 8     public static void method_get()
 9     {
10         ArrayList al = new ArrayList();
11
12         //1,添加元素。
13         al.add("java01");//add(Object obj);
14         al.add("java02");
15         al.add("java03");
16         al.add("java04");
17
18         /*
19         Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素。
20
21         while(it.hasNext())
22         {
23             sop(it.next());
24         }
25         */
26
27         for(Iterator it = al.iterator(); it.hasNext() ; )
28         {
29             sop(it.next());
30         }
31     }
32
33
34     public static void method_2()
35     {
36         ArrayList al1 = new ArrayList();
37
38         al1.add("java01");
39         al1.add("java02");
40         al1.add("java03");
41         al1.add("java04");
42         ArrayList al2 = new ArrayList();
43
44         al2.add("java03");
45         al2.add("java04");
46         al2.add("java05");
47         al2.add("java06");
48
49
50         //al1.retainAll(al2);//取交集,al1中只会保留和al2中相同的元素,如果al1和al2没交集,打印结果为[],空
51         al1.removeAll(al2); //去交集,all只会保留和al2中不相同的元素
52
53         sop("al1:"+al1);
54         sop("al2:"+al2);
55
56
57
58
59     }
60
61     public static void base_method()
62     {
63         //创建一个集合容器。使用Collection接口的子类。ArrayList
64         ArrayList al = new ArrayList();
65
66         //1,添加元素。
67         al.add("java01");//add(Object obj);
68         al.add("java02");
69         al.add("java03");
70         al.add("java04");
71
72         //打印原集合。
73         sop("原集合:"+al);
74
75
76         //3,删除元素。
77         //al.remove("java02");
78         //al.clear();//清空集合。
79
80
81         //4,判断元素。
82         sop("java03是否存在:"+al.contains("java03"));
83         sop("集合是否为空?"+al.isEmpty());
84
85
86         //2,获取个数。集合长度。
87         sop("size:"+al.size());
88
89         //打印改变后的集合。
90         sop(al);
91
92     }
93
94     public static void sop(Object obj)
95     {
96         System.out.println(obj);
97     }
98 }

Collection

|--List:元素是有序的,元素可以重复。因为该集合体系有索引。

   |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。

   |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。(我只知道旁边的哥们,别人我不认识,像链条一样连起来)

   |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。

|--Set:元素是无序,元素不可以重复。、

  |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
        HashSet是如何保证元素唯一性的呢?
        是通过元素的两个方法,hashCode和equals来完成。
        如果元素的HashCode值相同,才会判断equals是否为true。
        如果元素的hashcode值不同,不会调用equals。

        注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。

  |--TreeSet:可以对Set集合中的元素进行排序。

        底层数据结构是二叉树。

        保证元素唯一性的依据:
        compareTo方法return 0.

        TreeSet排序的第一种方式:让元素自身具备比较性。
        元素需要实现Comparable接口,覆盖compareTo方法。
        也种方式也成为元素的自然顺序,或者叫做默认顺序。

        TreeSet的第二种排序方式。
        当元素自身不具备比较性时,或者具备的比较性不是所需要的。
        这时就需要让集合自身具备比较性。
        在集合初始化时,就有了比较方式。

List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。


add(index, );
addAll(index,Collection);


remove(index);


set(index,element);
查(获取)
get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();

List集合特有的迭代器。ListIterator是Iterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

该接口只能通过List集合的listIterator方法获取。

时间: 2024-08-29 14:39:30

黑马程序员-----集合框架类(一)的相关文章

黑马程序员-----集合框架类(三) Map集合

黑马程序员-----集合框架类(三) Map集合 1.1 Map集合:该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 1,添加. put(K key, V value) putAll(Map<? extends K,? extends V> m) 2,删除. clear() remove(Object key) 3,判断. containsValue(Object value) containsKey(Object key) isEmpty() 4,获取. get(Object ke

黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入

1.1 高级for循环(示例1) 格式:for(数据类型 变量名 : 被遍历的集合(Collection)或者数组){ } 对集合进行遍历.只能获取集合元素.但是不能对集合进行操作. 迭代器除了遍历,还可以进行remove集合中元素的动作.如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作. 1.1.2 传统for和高级for有什么区别呢? 高级for有一个局限性.必须有被遍历的目标. 1 示例1: 2 import java.util.*; 3 4 class For

黑马程序员——集合框架类总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 为什么会出现集合类? Java语言是面向对象的语言,所有命令都是操作对象的,有集合类的出现就可以操作对象 数组和集合类的区别是什么呢? 数组中可以存储基本类型的数据,也可以存储对象,集合类只能存储对象 集合类的特点有什么? 集合只适用于存储对象,长度是可变化的,集合可以存储不同类型的集合. 集合类Collection接口,子类接口有List接口和Set接口,List接口下含有ArrayList

黑马程序员-集合框架(Map和Collections)

--Java培训.Android培训.iOS培训..Net培训.期待与您交流!--- 一.概述 Map是一种存储键值对的存储容器,而且保证键的唯一性.提供一种以"键"标识"值"的数据存储方式.接口形式为:Map<K,V>,其中K是此映射所维护的键的类型,V是映射值的类型.其有两个常用子类,HashMap和TreeMap,另有HashTable与HashMap功能类似,是早期版本.三者特点与不同如下: HashMap:JDK1.2版本出现,底层使用哈希表数

黑马程序员-集合工具类和1.5新特性

集合框架的工具类:collecttions Collections 的方法全是静态的 List没有排序功能,所以java定义了Collections工具类. 比较器无法传给list,只能传给Set.但是集合工具类有此方法 1.排序: comparable:    sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序. comparator:    sort(List<T> list, Comparator<? super T> c) 根据比

黑马程序员-集合框架

集合:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 集合框架: Java集合框架是指java的集合类.Collection 接口是一组允许重复的对象.Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制. List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列.Map接口是一组成对的键-值对象,即所持有的是key-value pairs.Map中不能有

黑马程序员-集合框架(List和Set)

一.概述 集合是一种可变数据项的容器,具有统一的父类接口Collection<E>(Map并没有继承之),与其子集合的关系如下 图,集合的特点是长度可变,可以存储多种类型的对象(不加泛型时).这也是与数组的两点最大的不同. java集合类关系图 Collection最为根接口,List.Set.Queue接口均直接继承自它,Map接口虽然不是直接继承自Collection,但是接口中使用到了Collection,即Map的数据也是使用Collection存储的. 研究集合必不可少的是先研究Co

黑马程序员——集合框架(一)

package com.yang.ex; import java.util.ArrayList; /*集合类: * 面向对象语言的体现都在对象行使,为了方便对对象操作,集合就是最常见的储存对象 * * 数组与集合类的不同: * 数组的长度是固定的,并且类型是固定的的,但是集合的长度是可变的.数组中可以储存基本数据类型,但是集合智能存储对象 * * 集合类的特点: * 集合只用于储存对象,集合的长度是可变的.集合合一储存不同类型的对象 * 每一个容器对数据的存储方式都有不同 * 每一个存储方式称为

黑马程序员_Foundation框架—集合

Foundation框架-集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向对象的形式操纵对象,是不可变数组. C语言数组有一个缺点即数组中只能存放同种数据类型的元素. OC数组只能存放OC对象,不能存放非OC对象,如int,结构体和枚举等. (2)NSArray的创建 (3)NSArray的访问 (4)NSArray的遍历 数组的遍历有以下几种方式: 首先创建一个数组 第