综述:
- java.util包中提供了一些集合类,这些集合类又被称为容器
- 和数组的区别:数组的长度是固定的,集合的长度是可变的;数组用来存放基本的数据类型,集合用来存放对象的引用。
- 常用的集合有List集合、Set集合、Map集合,其中List与Set继承了Collection接口,各接口还提供了不同的实现类。
Collection接口:
常用方法:
- Add(E e)——将指定对象添加到该集合中
- remove(Object o)——将指定的对象从集合中移除
- isEmpty()——返回boolean值,用于判断当前集合是否为空
- iterator()——用于遍历集合中的对象,返回在此Collection的元素上进行迭代的迭代器。
- size()——返回int值,获取集合中元素个数
例子
package com.flz.javamuster;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Muster//Muster:集合~
{
public static void main(String[] args)
{
Collection<String> liStrings=new ArrayList<>();//实例化集合类对象
liStrings.add("hello");//向集合添加数据
liStrings.add("set");
liStrings.add("world");
Iterator<String>iterator=liStrings.iterator();//创建迭代器
while (iterator.hasNext())//判断是否有下一个元素
{
String string = (String) iterator.next();//获取集合中的元素(iterater.next()返回的是Object)
System.out.println(string);
}
}
}
运行结果
hello
set
world
List集合
常用方法
- 由于List接口继承了Collection接口,所以包含了Collection中的所有方法。
- get(int index)——获得指定索引位置的元素。
- set(int index,Object obj)——将集合中指定索引位置的对象修改为指定的对象。
List接口的实现类
- ArrayList类:实现了可变的数组,允许保存所有元素,包括null;可以根据索引位置快速随机访问,缺点是插入和删除对象的速度较慢。
- LinkedList类:采用链表结构保存对象,便于插入删除,但随机访问集合中的对象效率低。
- 注意:使用List集合通常声明为List类型,通过不同的实现类来实例化集合。
例子
package com.flz.javamuster;
import java.util.ArrayList;
public class Gather
{
public static void main(String[] args)
{
java.util.List<String> list=new ArrayList<>();
list.add("li1");
list.add("li2");
list.add("li3");
int i=(int)(Math.random()*(list.size()-1));
System.out.println("随机获取数组中的元素是:\n"+list.get(i));
list.remove(1);
System.out.println("移除后的list元素是:");
for (int j = 0; j < list.size(); j++)
{
System.out.println(list.get(j));
}
}
}
运行结果:
随机获取数组中的元素是:
li1
移除后的list元素是:
li1
li3
Set集合
要点:
- set集合中的元素不按特定方式排序,只是简单地吧对象加入集合中
- 不能包含重复对象
- 继承于Collection接口,包含Collection接口中的所有方法
- 由于不能有重复对象,所以必须小心操作可变对象
常用的实现类
- HashSet类:由哈希表(实际上是一个HashMap实例)支持,不保证Set的迭代顺序,特别是不保证该顺序永久不变。允许使用NUll元素。
- TreeSet类:该类不仅实现了Set接口,还实现了 java.util.SortedSet接口。因此可以通过比较器(一个comparator()方法)对TreeSet类实现的Set集合中的对象进行排序。
TreeSet类新增方法:
- first()——返回此Set中的第一个(最低)元素
- last()——返回此Set中的最后一个(最高)元素
- comparator()——进行排序的比较器,如果set使用自然顺序,则返回null
- headSet(E toElement)——返回一个新的Set集合,包含toElment之前的所有对象
- subSet(E fromElement,E toElement)——返回一个新的Set集合,包含fromElement(包括)和toElement(不包括)之间的所有对象
- tailSet(E fromElement)——返回一个新的Set集合,包含对象fromElement(包括)之后的所有对象
Map集合
要点
- Map集合没有继承Collection接口 ,其提供的是key到value的映射。
- Map中不能包含相同的key,每个key只能映射一个value。
- key还决定了存储对象在映射中的存储位置(不是由key对象本身决定,而是通过“散列技术”进行处理???)
Map接口中的常用方法
- put(K key,V value)——添加映射关系
- containsKey(Object key)——如果此映射包含指定key的映射关系 ,返回true。
- containsValue(Object Value)——如果此映射将一个或多个key映射到指定值,则返回true。
- get(Object Key)——如果存在指定的Key对象,则返回该对象对应的值,否则返回null。
- KeySet()——返回该集合中所有key对象形成的Set集合
- value()——返回所有值对象形成的Collection集合
Map接口的实现类
- HashMap类
建议使用HashMap类实现Map集合,因为其添加删除映射关系的效率更高。 - TreeMap类
不仅实现了Map接口,还是实现了java.util.SortedMap接口,因此此映射关系具有一定顺序
建议:
通过HashMap创建Map集合,当需要顺序输出的时候再创建一个完成相同映射关系的TreeMap类实例。