集合:
为何使用???:我们都知道可以用数组来保存对象,但是当不知道要保存的对象的个数时,就用到了集合;
是什么???:JDK提供了一些特殊的类,存放在java.util包下,这些类可以存储re任意类型的对象,且长度可变;注意导包;
怎样使用???:
集合按照存储结构分为两大类:单列集合(Collection)和 双列集合(Map);{集合和数组一样,索引都是从0开始的}
简介:(1)Collection:用于存储一系列符合某种规律的元素,他有两个子接口 List 和 Set ;
List主要特点是元素有序,元素可重复;其实现类主要有ArrayList 和 LinkedList ;
Set 的特点是元素无序且不可重复;其主要实现类有 HashSe t和 TreeSet ;
(2)Map :双列集合类的接口,用于存储具有键值对(key-value)映射关系的元素;其中每个元素都包含一对键值对;
一般都是通过map元素的key来找到value的;他的接口实现类主要有 HashMap 和 TreeMap ;
单列集合常用方法:
boolean add(Object obj); //向集合中添加一个元素
boolean addAll(Collection c); //将Collection中的所有元素都添加到集合中
boolean remove(Object obj); //移除指定元素
void clear(); //清除集合中所有的数据
boolean isEmpty(); //判断该集合是否为空
Iterator iterator(); //返回在该集合的元素上进行迭代的迭代器,用于遍历该集合的所有元素
int size(); //返回集合的元素个数
Iterator用法:
Iterator it=集合对象名.iterator();
while(it.hasNext())
{
System.out.printf(it.next()); //遍历输出集合元素
}
foreach用法:
for(类型名 变量名:对象名)
{
System.out.printf(it.next()); //遍历输出集合元素
}
区别:foreach循环用起来比较简洁,但是他只能访问数组或集合中的数据,而不能对数组或者集合中的数据进行操作
List:
(1)ArrayLis:是List接口的一个实现类,在该类内部封装了一个长度可变的数组对象,当数据过多时,ArrayList会分配更大 空间的数组来存储数据,因此,ArrayList可以看成一个长度可变的数组;
优点:便于查找;通过索引来访问元素较快捷;
缺点:在增加或删除元素时或创建新的数组,效率较低;不适合做大量的增删操作;
( 2)LinkedList:原理:在其内部有一个双向循环链表;所以其增删效率较高,
List集合常用方法:
void add(int index,Object obj); //将元素放在集合索引为index的地方;
Object get(int index); //返回索引为index的元素;
Object remove(int index); //删除索引为index的元素,并返回这个元素;
Set:
(1)HashSet:根据对象的哈希值来确定元素在集合中的存储位置:具有良好的存取和查询性能;存储的元素不可重复;
(2)TreeSet:以平衡二叉树的方式来存储元素;可以实现对集合中的元素排序;(平衡二叉树就是存储的元素按照大小排 序,一个节点左子树比该节点小,同时它的右节点比该节点大);
Map:
常用方法:
void put(Object key,Object value); //将指定的值和键相关联;
Object get(Object key); //返回指定键所映射的值,若该键不包含映射关系,则返回null;
Set keySet(); //返回此映射中包含键的Set视图;
(1)HashMap:用于存储键值映射关系;不能存储值相同的值;当存储时出现相同的键不同的值时,值会被覆盖(键相同,值 覆盖)
(2)TreeMap: 用于存储键值映射关系,不能存储相同的键;
使用方法:
创建集合: Map map=new HashMap();/TreeMap map =new TreeMap();
存储数据: map.put(key,value);……
获取键的集合: Set keySet=map.keySet();
遍历输出集合: Iterator it=ketSet.iterator();
while(it.hasNext())
{
System.out.printf();
}