一.集合的概念
1.1集合与数组的区别
(1)长度区别:集合长度可变,数组长度不可变
(2)内容区别:集合可存储不同类型元素,数组存储只可单一类型元素
(3)元素区别:集合只能存储引用类型元素,数组可存储引用类型元素,也可存储基本类型元素
1.2集合的概念
集合类存放于java.util包中。? 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。? 集合类型主要有3种:set(集)、list(列表)和map(映射)。
通俗的说,集合就是一个放数据的容器,准确的说是放数据对象引用的容器。?
?Java集合类主要由Map接口和Collection接口派生而来,,其中Collection由两个常用的子接口即List接口和set接口,所以常说集合框架由3大类接口构成(Map接口,List接口,set接口)。
二.Collection接口
Collection接口是单列集合的最顶层接口,是最基本的集合接口,可以存储一组不唯一无序的的对象,定义了一些通用的方法。
add(E e)添加元素; ?clear()清空元素; ?remove(E e)移除元素; ?size()元素数量;
toArray()集合转数组; ?contains(E e)判断元素是否存在; ?isEmpty()判断集合是否为空;
三.List接口 ?
list接口常用的实现类——ArrayList和LinkedList
3.1使用ArrayList类动态存储数据
数据结构:数组但不等同于数组,集合中可以添加任何类型的数据,并且添加的数据都将转换成object类型。
特点:查询快,增删慢,主要用于查询遍历数据,为最常用集合之一;
底层分析:数组结构是有序的元素序列,在内存中开辟一段连续的空间,在空间中存放元素,每个空间都有编号,通过编号可以快速找到相应元素,因此查询快;数组初始化时长度是固定的,要想增删元素,必须创建一个新数组,把源数组的元素复制进来,随后源数组销毁,耗时长,因此增删慢。
举例说明Arraylist类的一些常用方法:
public class TestArraylist {
public static void main(String[] args) {
ArrayList list=new ArrayList(20);
list.add(123);//在列表的末尾添加元素o,起始索引位置从0开始
list.add("adc");
list.add(12.54);
list.add(1,"我是伞兵");//在指定的索引位置添加元素o
list.remove(0);//从例表中删除hiding索引位置的元素
list.add(10,"88");//越界报错,索引超出给出的数据范围
// System.out.println(list);
System.out.println(list.get(1));//返回指定索引位置处的元素,取出的元素是Object类型,
// 使用前需进行强制类型转换
list.set(2,"这个下标位置的数改变了");//将指定索引位置的元素替换为obj元素
// System.out.println(list);
System.out.println(list.contains("我是伞"));//判断例表中是否存在指定元素o
System.out.println(list.indexOf("adc"));//找例表中某个元素的下标
//普通for遍历
// for (int i = 0; i < list.size(); i++) {
// System.out.println(list.get(i));
// }
//
// 增强for遍历
// for(Object o:list){
// System.out.println(o);
// }
//迭代器遍历
Iterator itr=list.iterator();
while(itr.hasNext()){
// Object next=itr.next();
System.out.println(itr.next());
}
}
}
3.2使用LinkedList类动态存储数据
数据结构:双向链表;
特点:查询慢,增删快;
底层分析:链表分为单向和双向,就是一条链子和两条链子的区别;多出的那条链子记录了元素的顺序,因此单向链表结构无序,双向链表结构有序;链表结构没有索引,因此查询慢;链表的增删只需在原有的基础上连上链子或切断链子,因此增删快。
包含ArrayList类所包含的方法,还提供了一些方法可以在Linked List类的首部或尾部进行插入、删除操作。
public class TestLinkedList {
public static void main(String[] args) {
LinkedList list =new LinkedList();
list.add(12330);
list.add("帅哥");
list.add(52.2);
list.add(12);
list.add(0,"我是伞兵");
list.addFirst("你好");
list.addLast("天平");
System.out.println(list);
list.remove();
list.poll();
list.pop();
list.peek();
System.out.println(list.getFirst());
System.out.println(list.getLast());
}
}
|