集合框架:由一组(主要是Collection和Map接口)用来操作对象的接口组成
Collection的父类是Iterable
数组与集合的差异:数组一次性开辟一片空间,一旦定义,数组的大小就不可以改变,集合是数组的延伸,集合的大小可以改变,可以动态的增加大小
不同接口描述不同类型的数据
接口层次:
List和Set都是继承Collection接口的接口。Map并不继承collection接口。
List接口:用于定义一个允许出现重复项的有序集合List是一个特殊的Collection,它新添的面向位置的操作,包括插入某个元素或某个集合的功能,包括获取、删除或更新元素的功能
创建集合li和集合a:ArrayList:随机访问的效率高
List li=new ArrayList();
li.add(2018);
li.add(5);
li.add(6);
li.add(null);
li.add("renull");
li.add(0,"ls");//add(索引,value值),根据索引添加元素到对应位置
List a=new ArrayList(); //定义新集合
a.add(11);
a.add("点");
a.add(20);
a.add("分");
//添加a集合到li集合
li.addAll(0,a); //li.addAll(0,a); 根据索引添加a集合到li集合,并放在第一位
用迭代器遍历集合li:
Iterator iter=li.iterator(); //迭代器 : 遍历集合
while(iter.hasNext()){ //hasNext判断集合a的元素是否存在
System.out.println(iter.next()); //iter.next()内为Object类 将Object类强转为目标类,实现输出对象属性
}
boolean c=iter.hasNext();
System.out.println(c);
用for循环遍历集合li:
for (Object obj:li){ System.out.println(obj); //遍历集合 }
集合对应的方法:
li.addAll(0,a); //li.addAll(0,a); 根据索引添加a集合到li集合,并放在第一位
li.clear(); //清空集合
li.remove(0); //根据索引删除元素
li.remove("ls"); //直接删元素
li.removeAll(a); //从集合li中删除集合a
li.retainAll(a); //从集合li当中删除a集合不包含的元素 ---遍历俩个集合的公共元素
/*
int q=li.size(); //查看集合大小
System.out.println(q);
*/
li.subList(0,10); //截取集合元素索引0-9 包前不包后
/* boolean c=li.isEmpty(); //判断集合是否为空 System.out.println(c); */ /* Object obj=li.get(0); //根据索引找元素 System.out.println(obj); */ /* int v=li.indexOf("ls"); //根据元素找索引 li.lastIndexOf根据最后出现的元素找索引 System.out.println(v); */ /* boolean c=li.contains(2018); //判断当前集合中是否包含()内元素 System.out.println(c); */ /* boolean c=li.containsAll(a); //判断当前集合是否包含a集合 System.out.println(c); */
集合转换为数组:
Object [] obj=li.toArray(); //将集合转换为数组 for(Object o:obj){ System.out.println(o); }
LinkedList:遍历元素,顺序访问元素
public class LinkedListApp{ LinkedList linkedList; public LinkedListApp(){ //用Collection构造一个LinkedList Collection c= this.getData(); linkedList=new LinkedList(c); //把ArrayList集合填充到LinkedList集合中 //查看linkedList的元素 this.outData(linkedList); // //获取第一个元素 String firstStr=(String)linkedList.getFirst(); System.out.println("\nlinkedList中第一个元素为"+firstStr); //获取最后一个元素 String lastStr=(String)linkedList.getLast(); System.out.println("\nlinkedList中最后一个元素为"+lastStr); //移除首尾元素 linkedList.removeFirst(); //移除铀元素 linkedList.removeLast(); this.outData(linkedList); } //给集合赋值 public ArrayList getData(){ ArrayList List=new ArrayList(); for(int i=0;i<=13;i++){ List.add("第"+i+"月"); } return List; } //outData方法实现集合的迭代 public void outData(LinkedList list){ System.out.println("查看LinkedList中的元素"); Iterator iter=linkedList.iterator(); int i=0; while(iter.hasNext()){ if(++i%5==0) System.out.println(iter.next()+""); else System.out.print(iter.next()+""); } //System.out.println("\n"); } public static void main(String[] args) { LinkedListApp l=new LinkedListApp(); } }
Veotor矩阵:和数组一样,可以使用整数索引进行数据访问的类。Vector的大小可以根据需要增大或缩小,以适应创建Vector后进行添加或删除的操作
Stack:是Vector的子类,通过push()和pop()方法实现一个标准的堆栈
public class Sta_ck { int goldNum=4; Stack stack; public Sta_ck(){ stack=new Stack(); System.out.println("死胡同里发现了"+goldNum+"两黄金,赶快去抢......"); this.inHole(); this.outHole(); } /*进胡同*/ public void inHole(){ for(int i=1;i<=goldNum+1;i++){ stack.push("people"+i); //入栈 if(i==goldNum+1){ System.out.println("people"+i+":我是最后一个进入死胡同的人, 没黄金了?那你们不给我黄金谁也别想出去!"); }else{ System.out.println("people"+i+":我是第"+i+"个进入的人,抢了1两黄金"); } } } /*出胡同*/ public void outHole(){ for(int i=1;i<goldNum;i++){ String first1=(String)stack.peek(); //出栈之前的首元素 stack.pop(); //出栈 String first2=(String)stack.peek(); //出栈后的首元素 System.out.println(first2+"给了"+first1+"一两黄金,\n对其他人说他走了你们不给我黄金谁也别想出去!\""); if(i==goldNum-1){ System.out.println("People1对People2说:我就不给你,谁怕谁啊!"); } } } public static void main(String[] args) { new Sta_ck(); } }
Set集合:不包含重复元素的实现Collection接口的接口,Set集合最多包含一个null元素,存储无序的对象
TreeSet:集合内的对象按特定的顺序存储
HashSet:创建使用哈希表存储的集合,操作性能和时间效率较高
LinkedHashSet:扩展HashSet,以链表的形式把数据存储在哈希集合中,LinkedHashSet的迭代器按照元素插入的顺序来访问各个元素
定义一个Set集合来存放元素:
Set<Object> s=new HashSet<Object>(); s.add(1); //向集合中添加元素 s.add(2); s.add(3); s.add(4); s.add(5); s.add(6); s.add("sss"); Iterator iter=s.iterator(); //迭代器遍历集合 while(iter.hasNext()){ System.out.println(iter.next()); }
TreeSet的应用:
public class TreeSetApp {
TreeSet treeSet;
public TreeSetApp(){
int k=0;
treeSet=new TreeSet();
for(int i=1;i<13;i++){
treeSet.add("第"+i+"月");
}
Iterator iter=treeSet.iterator();
while(iter.hasNext()){
k++;
String s=(String)iter.next(); //将Object强转为String类型
if(k%4==0){
System.out.println(s+" ");
}
else
System.out.print(s+" ");
}
}
public static void main(String args[ ]){
new TreeSetApp();
}
}
运行结果:
HashSet的应用:
public class SetGather { public static void main(String[] args) { new SetGather(); } HashSet hashSet; public SetGather(){ hashSet=new HashSet(); for(int i=0;i<13;i++){ hashSet.add("第"+i+"月"); } System.out.println("hashSet中共有"+hashSet.size()+"个元素"); //查看集合大小 boolean bool=hashSet.remove("第0月"); //删除指定元素 System.out.println("删除第一个元素"+bool); System.out.println("hashSet中是否存在第0月"+hashSet.contains("第0月")); //判断集合是否还含有第0月 Iterator iter=hashSet.iterator(); int i=0; while(iter.hasNext()){ i++; if(i%4==0){ System.out.println(iter.next()); }else{ System.out.print(iter.next()); } } } }
运行结果:
Map集合:用键值对存储元素
Map集合的应用:
创建一个新的Map集合并赋值:
Map m=new HashMap(); m.put("a","1"); m.put("b","2"); m.put("c","3"); m.put("d","4");
Map集合的方法:
/* //判断是否包含键 boolean b=m.containsKey("d"); //判断是否包含值 boolean b1=m.containsValue("1"); //删除键 m.remove("a"); //定义新的集合 Map m1=new HashMap(); m1.put("e","5"); //集合叠加 m.putAll(m1); //获取m中所有的键保存在key中 Set key=m.keySet(); //遍历集合m的键 Iterator iter=key.iterator(); while(iter.hasNext()){ //将key值强转为String类型 String k=(String)iter.next(); //类型转换 ///根据键得到值 System.out.println(m.get(k)); //由键获取值 } */
得到集合的键的集合和值的集合:
public static void main(String[] args) { //Map集合 Map m=new HashMap(); m.put("a","1"); m.put("b","2"); m.put("c","3"); m.put("d","4"); System.out.println(m); System.out.println("---------------"); //将键值对合成为一个元素存储在s集合中 Set<Map.Entry<String,String>> s=m.entrySet(); System.out.println(s); System.out.println("---------------"); Iterator<Map.Entry<String,String>> iter=s.iterator(); //用迭代器遍历集合s while(iter.hasNext()){ //强转拆分 Map.Entry map=(Map.Entry)iter.next(); System.out.print(map+"\t\t"); System.out.println("key:"+map.getKey()+"\t"+"value:"+map.getValue()); } }