Java基础(七)集合框架、迭代器

数据多了用对象存,对象多了用集合存。集合就是存储对象最常用的一种方式。

集合长度可变,数组长度不可变,数组只能存同一种对象。

集合框架顶层就是Collection(接口)。

每一个容器对数据的存储方式都有不同。

数据在内存中的构成情况(存储方式)成为数据结构。

size()返回此collection中所有元素的个数。

集合当中不可能存对象实体。集合和数组里面存储的都是对象的引用(地址)。

array1.retainAll(array2);//取交集,array1中只会保留和array2中相同的元素。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

迭代器就是集合取出元素的方式。

迭代器是为了取出并操作元素。

Iterator it = array.iterator();//集合的对象调用iterator()方法,返回一个iterator接口(的子类对象(接口型引用只能指向j自己的              子类对象,这个对象(it)不是new出来的,是通过集合(array)中的方法(iterator())获取出来的。))。

对于取出这个动作,不足以用一个函数来描述(判断、取出),需要用多个功能来体现,把多个功能封装到一个对象里。

iterator是内部类的应用。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

List:元素是有序(怎么存进去怎么取出来)的,元素可以重复。因为该集合体系有索引。

Set:元素是无序(存入和取出的顺序不一定一致)的,元素不能重复。

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

array.get(1)通过角标获取元素。直接获取角标代表的值。

不能对同一组元素进行多种同时操作(不能既用集合又用迭代器去操作同一组元素),可能会引发并发修改异常。

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

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

LinkedList :底层数据结构使用的是链表数据结构。查询很慢,增删速度很快。

Vector:底层是数组数据结构。线程同步。被ArrayList替代。

容器的增、删、查被多线程操作容易出现问题

枚举就是Vector特有的取出方式。

取出方式:迭代器、遍历(for循环)、get方法、按角标索引、枚举(Vector特有)。

LinkedList:getFirst()获取元素,但不删除元素。removeFirst()获取元素,但是元素会被删除。

堆栈数据结构:先进后出。如同一个杯子。

队列数据结构:先进先出。如同一个水管。

在迭代时循环中next调用一次,就要hasNext判断一次。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Set:元素是无序(存入和取出的顺序不一定一致)的,元素不能重复。

set集合的功能和Collection是一致的,没有特有。

HashSet:底层数据结构是哈希表数据结构。线程是非同步的。

在内存当中如果哈希值一样,再比较是不是同一个对象。

HashSet是通过元素的两个方法,hashCode和equals来保证元素的唯一性(如果元素的HashCode值相同,才会判断equals是否               为true,如果元素的hashCode值不同,不会调用equals。)。

描述事物需要往集合里存储的时候,这样的对象一般都会覆写HashCode和equals方法。

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

ArrayList判断元素是否存在还有删除元素,只依赖equals。 

数据结构不同,判断和删除依赖的方法也不一样。

TreeSet:可以对Set集合中的元素进行排序。底层数据结构是二叉树。

保证元素唯一性的依据是CompareTo方法return 0;

TreeSet集合删除或者判断元素是否包含用的都是CompareTo。

TreeSet的第一种排序方式:让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。

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

            在集合初始化时就有了比较方式。

 

Comparable此接口强行对实现他的每一个类的对象进行整体排序,这种排序被称为类的自然排序。强制让对象具备比较性。

TreeSet集合存储对象,是要排序,所以往TreeSet里存的对象必须要具备比较性。

排序时,当主要条件相同时,一定判断一下次要条件。

二叉树又叫红黑树。

二叉树元素多了以后会自动取折中值。

二叉树取值是从小到大取。

字符串本身具备比较性(comparable)。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值