十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Collection接口是List/Set/Queue接口的父接口,其中定义的常用的操作方法有(注意此处笔记不完整,演示代码没有导包):
(1)HashSet是Set接口的典型实现,线程执行是非安全的,集合元素可以为null
(2)HashSet通过过两个方法hashCode()和equals()保证元素的唯一性,方法自动生成。当存储对象时则无法确保唯一性,可能需要重写hashCode。
(3)TreeSet是Set接口实现
+ 1. 底层数据是红黑二叉树
+ 2. 排序方式:自然排序、比较器排序
+ 3. 通过比较返回值是否为0来保证元素的唯一性。
例子:
//使用HashSet类随机产生10个不重复的1到20的不重复随机数
public class HashSetDemo {
public static void main(String[] args) {
Random r=new Random();HashSet <Integer> hs=new HashSet<Integer>(); while(hs.size()<10) { hs.add((r.nextInt(20)+1)); } for(Integer i:hs) { System.out.println(i); }
}
}
案例:main()方法中代码
Collection
lists = new ArrayList<>();
lists.add("集合lists测试1");
lists.add("集合lists测试2");
lists.add("集合lists测试3");CollectionAll listall = new CollectionAll(); listall.print(lists);
CollectionAll类如下:
package com.paint.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class CollectionAll{ public void print(Collection<T> lists){ for(T o:lists){ System.out.println(o); } }
}
利用集合的迭代器遍历(优势是不会轻易改变集合实参值)
public class InteratoeDemo {
public static void main(String[] args) {//Collection集合的遍历 Collection c=new ArrayList(); c.add("java01"); c.add("java02"); c.add("java03"); Iterator i=c.iterator(); while(i.hasNext()) { //向下转型 String s=(String) i.next(); System.out.println(s); } System.out.println("-----------------"); //List集合的遍历 List l=new ArrayList(); l.add(0,"测试01"); l.add(1,"测试02"); l.add(1,"java集合测试"); ListIterator li=l.listIterator(); //后向遍历 while(li.hasNext()) { String s=(String)li.next(); System.out.println(s); } System.out.println("-----------------"); //前向遍历 while(li.hasPrevious()) { String s=(String)li.previous(); System.out.println(s); } System.out.println("-----------------"); //get方法遍历 for(int x=0;x<l.size();x++) { String s=(String)l.get(x); System.out.println(s); }
}
}
public class Main {
public static void main(String[] args) {
//add()和remove()方法在失败的时候会抛出异常(不推荐)
Queuequeue = new LinkedList ();
//添加元素
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("poll="+queue.poll()); //返回第一个元素,并在队列中删除
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("element="+queue.element()); //返回第一个元素
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("peek="+queue.peek()); //返回第一个元素
for(String q : queue){
System.out.println(q);
}
}
}
HashMap
LinkedHashMap
注意:Map接口中的集合都有两个泛型变量
例子:
按照键值遍历
public class MapDemo {
public static void main(String[] args) {
//创建Map对象
Mapmap = new HashMap ();
//给map中添加元素
map.put("a", "孙俪");
map.put("b", "范冰冰");
map.put("c", "柳岩");
//获取Map中的所有key
SetkeySet = map.keySet();
//遍历存放所有key的Set集合
Iteratorit =keySet.iterator();
while(it.hasNext()){ //利用了Iterator迭代器
//得到每一个key
String key = it.next();
//通过key获取对应的value
String value = map.get(key);
System.out.println(key+"="+value);
}
}
}
按照键值对遍历
public class MapDemo {
public static void main(String[] args) {
//创建Map对象
Mapmap = new HashMap ();
//给map中添加元素
map.put("a", "孙俪");
map.put("b", "范冰冰");
map.put("c", "柳岩");
//获取Map中的所有key与value的对应关系
Set> entrySet = map.entrySet();
//遍历Set集合
Iterator> it =entrySet.iterator();
while(it.hasNext()){
//得到每一对对应关系
Map.Entryentry = it.next();
//通过每一对对应关系获取对应的key
String key = entry.getKey();
//通过每一对对应关系获取对应的value
String value = entry.getValue();
System.out.println(key+"="+value);
}
}