刨析源码,深层讲解 Java-集合框架( 三 )


返回obj在集合中首次出现的位置
int ( obj)
返回obj在当前集合中末次出现的位置
(int index)
移除指定index位置的元素,并返回此元素
set(int index,ele)
设置指定index位置的元素为ele
List (int , int )
返回从到位置的子集合
常用方法总结:
作用方法

add( obj)

(int index) / ( obj)

set(int index,ele)

get(int index)

add(int index,ele)
长度
size()
遍历
①迭代器方式 ② 增强for循环 ③ 普通的循环
3.2.1 代码演示
@Testpublic void test1(){ArrayList list = new ArrayList();list.add(123);list.add(456);list.add("AA");list.add(new Person("Tom",12));list.add(456);System.out.println(list);//[123, 456, AA, Person@621be5d1, 456]//void add(int index, Object ele):在index位置插入ele元素list.add(1,"BB");System.out.println(list);//[123, BB, 456, AA, Person@621be5d1, 456]//boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来List list1 = Arrays.asList(1, 2, 3);list.addAll(list1);//list.add(list1);System.out.println(list.size());//9//Object get(int index):获取指定index位置的元素System.out.println(list.get(0));//123}
@Testpublic void test2(){ArrayList list = new ArrayList();list.add(123);list.add(456);list.add("AA");list.add(new Person("Tom",12));list.add(456);//int indexOf(Object obj):返回obj在集合中首次出现的位置 。如果不存在,返回-1.int index = list.indexOf(4567);System.out.println(index);//-1//int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置 。如果不存在,返回-1.System.out.println(list.lastIndexOf(456));//4//Object remove(int index):移除指定index位置的元素,并返回此元素Object obj = list.remove(0);System.out.println(obj);//123System.out.println(list);//[456, AA, Person@621be5d1, 456]//Object set(int index, Object ele):设置指定index位置的元素为elelist.set(1,"CC");System.out.println(list);//[456, CC, Person@621be5d1, 456]//List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的左闭右开区间的子集合List subList = list.subList(2, 4);System.out.println(subList);//[Person@621be5d1, 456]System.out.println(list);//[456, CC, Person@621be5d1, 456]}
@Testpublic void test3(){ArrayList list = new ArrayList();list.add(123);list.add(456);list.add("AA");//方式一:Iterator迭代器方式Iterator iterator = list.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}//123//456//AA//方式二:增强for循环for(Object obj : list){System.out.println(obj);}//123//456//AA//方式三:普通for循环for(int i = 0;i < list.size();i++){System.out.println(list.get(i));}//123//456//AA}
3.3 List实现类之一: 3.3.1 概述
? 作为List接口的主要实现类;
? 线程不安全的,效率高;
? 底层使用[] 存储 。
3.3.2 源码分析
? jdk 7:
空参的构造器中,底层默认创建了长度是10的[]数组 。
ArrayList list = new ArrayList();list.add(123);//elementData[0] = new Integer(123);
如果此次的添加导致底层数组容量不够,则扩容 。
默认情况下,扩容为原来的容量的1.5倍,同时需要将原有数组中的数据复制到新的数组中 。
建议开发中使用带参的构造器:默认创建指定长度的数组。
ArrayList list = new ArrayList(int capacity)//默认创建指定长度的数组
? jdk 8:
底层[] 初始化为{},并没有创建长度为10的数组
ArrayList list = new ArrayList();