随机访问函数迭代器java_集合和迭代器

[TOC]

# 集合

## 集合继承关系图

![](https://box.kancloud.cn/ff3304c09ec8e6bee72ebf9e835f9bd7_732x350.png)

![](https://img.kancloud.cn/ad/4d/ad4d657ea66480eaeaffa5f4acd7ec79_1033x507.png)

list叫链,set叫集

list允许存储重复的,set不允许存储重复的

## 基本方法

~~~

public boolean isEmpty(): 判断当前集合是否为空

~~~

![](https://box.kancloud.cn/6dd774e3a008658cbb6ecc52d70672eb_870x351.png)

创建集合的方式

~~~

方式一:

Collection 变量名=new ArrayList();

方式二:

Collection 变量名=new ArrayList():

~~~

## ArrayList和LinkedList的区别

1. ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;

2. 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;

3. 对于添加和删除操作add和remove,一般大家都会说LinkedList要比ArrayList快,因为ArrayList要移动数据。但是实际情况并非这样,对于添加或删除,LinkedList和ArrayList并不能明确说明谁快谁慢

## 长度的3种表现形式

数组.length 属性 返回int

字符串.length() 方法,返回值int

集合.size()方法,返回值int

# 迭代器

**集合中把这种取元素的方式描述在Iterator接口中**

## 常用方法

![](https://box.kancloud.cn/4b769bbef477859254423f91e2706e47_895x198.png)

~~~

//for循环迭代写法:

for (Iterator it2 = coll.iterator(); it2.hasNext(); ) {

System.out.println(it2.next());

}

//存储时提升了Object。取出时要使用元素的特有内容,必须向下转型。

Collection coll = new ArrayList();

coll.add("abc");

coll.add("aabbcc");

coll.add("shitcast");

Iterator it = coll.iterator();

while (it.hasNext()) {

//由于元素被存放进集合后全部被提升为Object类型

//当需要使用子类对象特有方法时,需要向下转型

String str = (String) it.next();

System.out.println(str.length());

}

~~~

# 增强for循环

JDK1.5新特性,增强for循环

JDK1.5版本后,出现新的接口java.lang.Iterable

Collection是继承Iterable

Iterable作用,实现增强for循环

**弊端:没有索引,不能操作容器里面的元素**

## 格式

~~~

for (数据类型 变量名 : 数组或集合) {

}

~~~

~~~

int[] arr={1,2,3,4,5};

for(int i : arr) {

System.out.println(i);

}

~~~

# Collections线程安全

java提供的容器类Collection、List、Map、Set、SortedMap、SortedSet都是非线程安全的,当多线程访问这些容器类时,可能会出现数据同步导致的问题,java的工具类java.util.Collections提供了将非同步对象转换为同步对象的方法,如下:

~~~

Collections.synchronizedCollection( c);

Collections.synchronizedList(list)

Collections.synchronizedMap(m)

Collections.synchronizedSet(s)

Collections.synchronizedSortedMap(m)

Collections.synchronizedSortedSet(s)

~~~

这些方法的作用就是在原有容器的类的方法内部实现逻辑中加入了同步关键字syschronized.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值