一,Collection接口(除Map
外所有其他集合类的根接口)
集合可以理解为一个动态的对象数组,不同的是集合中的对象内容可以任意扩充
List
:一种有序列表的集合,例如,按索引排列的Student
的List
;
Set
:一种保证没有重复元素的集合,例如,所有无重复名称的Student
的Set
;
Map
:一种通过键值(key-value)查找的映射表集合,例如,根据Student
的name
查找对应Student
的Map
。
Java访问集合总是通过统一的方式——迭代器(Iterator)来实现,它最明显的好处在于无需知道集合内部元素是按什么方式存储的。
1.List接口(有序列表)
1,List接口可以存放任意的数据,而且在List接口中内容是可以重复的
2,List接口常用的子类:ArrayList,LinkedList
List
的行为和数组几乎完全相同:List
内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List
的索引和数组一样,从0
开始。
3.常用操作:
判断集合是否为空:boolean isEmpty()
查找指定的对象是否存在:int indexOf(Object o)
ArrayList
public class ListDemo {
public static void main(String[] args) {
ArrayList<String> lists = new ArrayList<String>();
lists.add("a");
lists.add("lx");
lists.add("a");
for(int i = 0;i<lists.size();i++){
System.out.println(lists.get(i));
}
lists.remove(0);
}
}
集合list的长度是size,add,remove的方法用来添加和删除元素;
1)isEmpty()——判断集合是否为空
public class ListDemo {
public static void main(String[] args) {
ArrayList<String> lists = new ArrayList<String>();
boolean b = lists.isEmpty(); //true
System.out.println(b);
}
}
2)indexOf()——查找对应元素的索引
public class ListDemo {
public static void main(String[] args) {
ArrayList<String> lists = new ArrayList<String>();
lists.add("a");
lists.add("b");
lists.add("a");
System.out.println(lists.indexOf("c")); //-1
System.out.println(lists.indexOf("b")); //1
System.out.println(lists.indexOf("a")); //0
}
}
2.Set接口
Set接口不能加入重复元素,但是可以排序;List可以加入重复元素,但是数据按传入顺序排列
Set接口常用子类:
散列存放:HashSet
有序存放:TreeSet
public class ListDemo1 {
public static void main(String[] args) {
Set<String> s = new TreeSet<String>();
s.add("b");
s.add("A");
s.add("c");
s.add("e");
s.add("d");
System.out.println(s);
}
}
[A, b, c, d, e]
二,Iterator接口
1,集合输出的标准操作:
标准做法,使用Iterator接口
2,操作原理:
Iteartor是专门的迭代输出接口,迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出
boolean | hasNext()
如果迭代具有更多元素,则返回。 true
|
E | next()
返回迭代中的下一个元素。
|
default void | remove()
从基础集合中删除返回的最后一个元素 通过此迭代器(可选操作)。
|
如果有迭代元素,hasNext()返回true,用next()返回迭代中的下一个元素;可与删除元素
public class ListDemo2 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String str = iter.next();
if("a".equals(str)){
iter.remove();
}else{
System.out.println(str);
}
}
}
}
Java有迭代功能。迭代功能可以由迭代器接口Iterable<E>
和迭代器接口Iterator<E>、ListIterator<E>实现,
每一个实现Collection<E>接口的容器对象都可以调用iterator()方法返回一个迭代器。
三,Map接口
1,保存形式:
key——>value的方式保存,即键值对的方式保存
2,常用子类:
HashMap:无序存放,key不允许重复
Hashtable:无序存放,key不允许重复
1.键值对的输入,获取和判断
public class MapDemo {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("k1", "lx"); //放入元素
map.put("k2", "zsh");
map.put("k3", "ztt");
map.put("k4", "wlw");
if(map.containsKey("k1")){
System.out.println("k存在");
if(map.containsValue("lx")){
String s = map.get("k1"); //通过键获取值
System.out.println(s);
}else{
System.out.println("值不存在");
}
}else{
System.out.println("k不存在");
}
}
}
2.键值对的全部输入输出
public class MapDemo {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("k1", "lx"); //放入元素
map.put("k2", "zsh");
map.put("k3", "ztt");
map.put("k4", "wlw");
//如何得到键
Set<String> s = map.keySet();
Iterator<String> i = s.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
//如何得到值
Collection<String> c = map.values();
Iterator<String> j = c.iterator();
while (j.hasNext()) {
System.out.println(j.next());
}
}
}