哪个市文化和旅游网站做的好,大网站,php网站开发技术优点,wordpress 标题字体大小目录 一.集合概述
二. 集合体系概述
1. Collection接口
1.1 List接口
1.2 Set接口
2. Map接口
三. ArrayList
1.ArrayList常用方法
2.ArrayList遍历
2.1 for循环
2.2 增强for循环
2.3 迭代器遍历 一.集合概述
我们经常需要存储一些数据类型相同的元素,之前我们学过…目录 一.集合概述
二. 集合体系概述
1. Collection接口
1.1 List接口
1.2 Set接口
2. Map接口
三. ArrayList
1.ArrayList常用方法
2.ArrayList遍历
2.1 for循环
2.2 增强for循环
2.3 迭代器遍历 一.集合概述
我们经常需要存储一些数据类型相同的元素,之前我们学过的容器就是数组,但是数组存在一个问题
1.数组的长度一旦确定就不能改变
但是我们在实际开发中,往往需要动态增长的容器来帮我们存储数据,显然只用数组的话需要自己去创建新数组并拷贝元素,这大大降低了开发效率,所以java提供了底层不同实现的数据结构的容器称为集合
二. 集合体系概述
1. Collection接口
Collection是一个接口,里面可以定义抽象方法,常量,静态方法,默认方法(jdk8及之后),该接口是单列集合的父接口,其中主要用于定义一些单列集合通用的方法,例如:单列集合的增删改查
1.1 List接口 List接口继承了Collection接口,List接口下的实现类允许出现重复元素,可以用索引和迭代器访问,主要有ArrayList,LinkedList,Vector等实现类
1.2 Set接口
Set接口同样继承了Collection接口,Set接口下的实现类不允许出现重复元素,且不能用索引访问,只能用迭代器访问,主要有HashSet,TreeSet等实现类
2. Map接口
Map是一个接口,里面可以定义抽象方法,常量,静态方法,默认方法(jdk8及之后),该接口是双列(键值对存储)集合的父接口,其中主要定义一些双列集合通用的方法,例如:双列集合的增删改查,主要有HashMap等实现类 三. ArrayList
ArrayList是List接口下的一个实现类,底层是一个可以动态增长的数组,所有的集合容器中都可以添加任意类型的数据,但为了使用时的统一,用一个指明集合中的元素类型,这是泛型,例如:String
1. ArrayList常用方法
size()返回集合中实际元素个数add(E e)向集合末尾添加元素,添加成功返回true,添加失败返回falseadd(int index,E e)向指定位置处添加元素remove(Object o)删除指定内容的元素,删除成功返回true,删除失败返回falseremove(int index)删除指定位置处的元素,删除成功会把该值返回get(int index)获取指定位置处的元素indexOf(Object o)从左向右查找指定元素,找到返回下标,找不到返回-1lastIndexOf(Object o)从右向左查找指定元素,找到返回下标,找不到返回-1set(int index,E element)用指定的元素替换指定位置的元素,同时返回旧元素isEmpty()判断集合是否为空contains(Object o)判断集合中是否包含指定元素
四. LinkedList
LinkedList是List接口下的一个实现类,底层是链表结构
1.LinkedList常用方法
int size()返回集合中的元素个数boolean add(E e)向集合尾部添加指定元素,添加成功返回true,添加失败返回falsevoid add(int index,E element()向指定位置添加指定元素 E get(int index)获取指定位置的元素boolean remove(Object o)删除指定元素,删除成功返回true,删除失败返回falseE remove(int index)删除指定位置的元素,并将其返回E remove()删除头部的元素并返回void addFirst(E e)向头部添加元素E removeLast()删除尾部元素并返回void addLast(E e)向尾部添加元素E pop()删除头部元素并返回void clear()清空链表元素boolean isEmpty()判断链表是否为空boolean contains(Object o)判断链表中是否包含指定元素
五. Vector
vector和ArrayList底层都是数组,且两者所拥有的方法也都是相同的,唯一的不同是,Vector的方法中被synchronized修饰,是线程安全的,它们两者的关系就好像StringBuffer和StringBuilder的关系一样
六. List接口下的实现类的遍历
这里以ArrayList为例,LinkedList和vector也是类似的
1. for循环
public class ArrayListDemo4 {public static void main(String[] args) {ArrayListString arrayList new ArrayList();arrayList.add(a);arrayList.add(a);arrayList.add(a);arrayList.add(b);arrayList.add(c);arrayList.add(d);for(int i 0;i arrayList.size(); i){if(a.equals(arrayList.get(i))){arrayList.remove(a);i--;}}}
}
注意:用for循环删除集合中的元素时要注意索引和元素位置的变化,将索引减回去,避免删除元素不彻底
2. 增强for循环
public class ArrayListDemo4 {public static void main(String[] args) {ArrayListString arrayList new ArrayList();arrayList.add(a);arrayList.add(a);arrayList.add(a);arrayList.add(b);arrayList.add(c);arrayList.add(d);/*2.增强for循环增强for循环遍历元素时,不允许修改集合元素(删除,添加)*/for(String s:arrayList){//arrayList.remove(s);System.out.print(s );//arrayList.add(1);}}
} 注意:在使用增强for循环遍历集合时不能对集合进行增删改查等操作
3. 迭代器遍历
public class ArrayListDemo4 {public static void main(String[] args) {ArrayListString arrayList new ArrayList();arrayList.add(a);arrayList.add(a);arrayList.add(a);arrayList.add(b);arrayList.add(c);arrayList.add(d);/*迭代器遍历*///获得集合对象的迭代器对象IteratorString it arrayList.iterator();//正向遍历while(it.hasNext()) {String s it.next();//获取到下一个元素System.out.print(s );/*if(s.equals(b)){it.remove();//使用迭代器对象删除元素}*/}System.out.println();//ListIterator 迭代器 只能对List接口下的实现类遍历//listIterator(index);可以从指定的位置开始向前或者向后遍历ListIteratorString listIterator arrayList.listIterator(1);while(listIterator.hasNext()){System.out.print(listIterator.next() );}System.out.println();//反向遍历ListIteratorString listIterator1 arrayList.listIterator(arrayList.size());while(listIterator1.hasPrevious()){System.out.print(listIterator1.previous() );}}
}
使用迭代器遍历集合是更推荐的方法,它既可以在遍历时对集合进行操作,也不用自己去管下一个元素是否会被略过