collection
单列集合的顶级父接口,他的功能是全部单列集合都可以继承使用的
注意collection是一个接口,我们不能直接创建他的对象,所以在学习时我们只能创建他实现类到对象
实现类* ArrayList
常见方法:
public boolean add(E e) 把元素e添加到集合E里面
//add有返回类型,为boolean类型,list类型一定返回true,set若添加数据之前不存在则返回true,表示添加成功,若 已经存在则返回false
public void clear() 清空集合中所有的元素
public boolean remove(E,e)把集合E中的元素e删去
//注意collection里面的方法在set依然会使用所以不可以根据索引删除,只能传递对象进行删除
//方法会有一个boolean返回值,若元素不存在则删除失败,返回false
public boolean contains(Object obj) 判断当前集合中是否包含给定的对象
//底层是依靠Object中的equal判断的,所以自定义对象需要在,Javabean类重写方法,如果不重写他会比较地址值
public boolean isEmpty() 判断当前集合是否为空
public int size() 返回集合中元素的个数/集合的长度
collection的遍历方式
迭代器遍历
迭代器不依靠索引
迭代器是在java中的类是Iterator,迭代器是集合专用的遍历方式
collection集合获取迭代器
Interator iterator () 返回迭代器对象,默认指向当前集合0索引
Iterator中的常用方法
boolean hasNext() 判断当前位置是否有元素,有元素返回true ,没有元素则返回false
E next( ) 获取当前位置元素,并将迭代器移向下一个位置
interator<String> it =list.iterator();//获取迭代器对象
while(it.hasNext()){//判断该位置是否为空
String str =it.next;//取出该位置并且将指针向后移动
System.out,println(str);
}
Collection<String> it= new ArrayList<>();//创建一个集合对象
it.add("iyovugl;ik1");//添加元素
it.add("iyovugl;ik2");
it.add("iyovugl;ik3");
it.add("iyovugl;ik4");
it.add("iyovugl;ik5");
it.add("iyovugl;ik6");
Iterator<String> in= it.iterator();//创建构造器对象
while(in.hasNext())//判断指针指向是否为空
{
String te = in.next();//得到指针指向对象并移动指针
System.out.println(te);
}
1.迭代器遍历完毕,指针不会复位
2.循环中只能用一次next方法 (核心是因为,while判断一次,若循环调用俩次则可能导致有空指针进行输出导致空指针异常)
3.迭代器遍历时,不能使用集合的方法进行增加或删除(需要进行删除可以使用迭代器的remove方法 ,进行删除,无法进行添加)
增强for遍历
增强for的底层就是迭代器,为了简化迭代器代码书写
所以单列集合和数组才可以用增强for进行遍历
格式:
for(元素的数据类型 变量名 : 数组或集合)
{
}
for(String s: list)
{
System.out.println(s);
}
idea 可以利用快捷键快速构造,list.for+回车
- s是一个中间变量用来记录集合元素,改变s不会改变集合元素
利用lambda表达式遍历
底层也会自己遍历每一个元素,以此得到每一个元素,传递给下面的accept方法
coll.forEach(new Consumer<String>() {
@Override
//s依次是集合的每一个元素
public void accept(String s) {
System.out.println(s);
}
});
上面是利用匿名内部类书写的下面将利用lambda表达式进行书写
coll.forEach((String s)->{
System.out.println(s);
}
);
List集合
Collection的方法list都继承了
List集合因为有索引,所以多了许多索引操作的方法
方法
void add (int index ,E element) 在该集合指定位置添加指定的元素,原位置元素后移
E remove(int index) 删除指定索引处的元素,返回被删除的元素
E set (int index ,E element) 修改指定位置处的元素,返回被修改的元素
E get (int index) 返回指定索引处的元素
List集合的遍历方法
迭代器遍历
Iterator<String> it = coll.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
列表迭代器遍历(迭代器的子接口)
在遍历时可以添加元素
ListIterator<String> it = coll.ListIterator();
while(it.hasNext())
{
String str = it.next();
if("bbb".equal(str)
{
it.add("qqq");//将qqq添加到集合中
}
System.out.println(str;
}
增强for遍历
for (String s : coll) {
System.out.println(s);
}
lambda表达式遍历
coll.forEach((String s)->
{
System.out.println(s);
});
普通for循环遍历(Lish集合存在索引)
for(int i=0;i<coll.size();i++)
{
System.out.println(coll.get(i));
}
Arraylist集合
-
ArrayList集合底层原理
-
ArrayList底层是数组结构的
-
ArrayList集合底层原理
-
1利用空参创建的集合,在底层创建一个默认长度为0的数组
2添加第一个元素时,底层会创建一个新的长度为10的数组
③存满时,会扩容1.5倍
④如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准
1.创建集合对象
public class pta{
public static void main(String[] args) {
ArrayList<String> list =new ArrayList<String>();
}
}
//泛型:限定集合中储存数据类型对象即
//基本数据类型运用类除了char和int 外其他为首字母大写如:short->Short,long->Long
//char 为Character,int 为integer
输出时会打印集合中的储存内容而不是地址
输出时会自带[ ]包裹
Arraylist方法
添加元素
list.add("aaa");//返回值布尔类型,返回值恒为true
删除元素
list.remove("aaa");//返回值布尔类型,存在为true,不存在为false;
String a=list.remove(0);//删除0索引对应元素并返回该元素,此时a对应aaa
修改元素
String a=list.set(0,"bbb");//将元素"bbb",覆盖到1索引指向位置,原元素被覆盖 ,返回被覆盖元素此时a对应aaa
查询元素
String a=list.get(0);//返回索引0对应元素
获取元素长度
int a=list.size();