集合框架
Iterable 迭代器的使用,访问Collection中的元素
- Collection(用于储存一系列符合元素的规则) List()(ArrayList(是List的接口实现类),LinkedList);
ArrayList例(遍历元素和随机访问元素的效率比较高)
import java.util.List; import java.util.ArrayList; import java.util.Iterator; public class LianXi3{ public static void main(String[] args) { //创建ArrayList集合 //多态,依赖倒转。 List list=new ArrayList(); //增删改查 list.add(new Student("张三",25)); list.add(new Student("李四",10)); list.add(new Student("王五",16)); list.add(new Student("赵六",6)); //删除指定位置的元素 list.remove(2); //移除列表中的所有元素 list.clear(); print(list); System.out.println("----------"); //遍历数组的方式1利用iterator进行遍历 Iterator iterator=list.iterator(); while(iterator.hasNext()){ Object next=iterator.next(); System.out.println(next); } } private static void print(List list) { //遍历数组的方式2 // TODO Auto-generated method stub for(int i=0;i<list.size();i++){ Student s=(Student)list.get(i); System.out.println(s); } } }
LinkedLists(优点:遍历元素和随机访问元素。缺点:添加和删除需要大量移动元素,按照内容查找)
package jichenglainxi; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class LianXi4 { public static void main(String[] args) { List list =new LinkedList<>(); list.add(new Student("李四",10)); list.add(new Student("王五",16)); list.add(new Student("赵六",6)); list.get(1); list.set(1, new Student("赵六",5)); //如果此 collection 不包含元素,则list true。 list.isEmpty(); //包含指定元素返回true; list.contains(2); list.clear(); print(list); //迭代器 Iterator iterator=list.iterator(); while(iterator.hasNext()){ Object next=iterator.next(); iterator.remove(); System.out.println(next); } } private static void print(List list) { // TODO Auto-generated method stub for(Object g:list){ System.out.println(g); } } }
set
hashSet() 底层使用数组加链表。对象—>获取对象的hashcode方法需要重写equals方法和HashSet方法
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class LianXi5 { public static void main(String[] args) { Set<Object> set=new HashSet<>(); set.add(new Student("张三", 10)); set.add(new Student("张三", 11)); set.add(new Student("李四", 10)); set.add(new Student("张三", 10)); set.add(new Student("李四", 10)); print(set); } @Override public boolean equals(Object obj) { // TODO Auto-generated method stub return super.equals(obj); } private static void print(Set set) { Iterator iterator = set.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }
TreeSet (二叉树的存储结构,排序后是升序,查询的速度要比List快没有HashSet快,需要实现Compareable或者new Set(Compartor)CompareTo比较是否相等,二叉树比较的是大小)
public class Student { private String name; private int age; public Student(String name,int age){ this.name=name; this.age=age; } @Override //重写toString方法, public String toString() { // TODO Auto-generated method stub return "姓名:"+name+",年龄:"+age; } @Override //需要重写equals和HashCode方法 public boolean equals(Object obj) { Student s=(Student)obj; //利用toString方法 return s.toString().equals(this.toString()); //如果不重写toString方法 可以用这样的方式进行比较 // return s.name.equals(this.name)&&s.age==this.age; } @Override public int hashCode() { return toString().hashCode(); } }
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class LianXi5 { public static void main(String[] args) { Set<Object> set=new HashSet<>(); //Student类里重写equals方法和HashCode方法 set.add(new Student("张三", 10)); set.add(new Student("张三", 11)); set.add(new Student("李四", 10)); set.add(new Student("张三", 10)); set.add(new Student("李四", 10)); print(set); } //遍历数组 private static void print(Set set) { Iterator iterator = set.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } }
泛型;
public class LianXi6 { public static void main(String[] args) { //创建ArrayList集合,使用泛型 ArrayList<String>list=new ArrayList<String>(); //添加字符串对象 list.add("String"); list.add("Collection"); //遍历集合 for(String str:list){ System.out.println(str); } } }
给类定义泛型
public class LianXi7<T> { T temp; public void save(T temp){ this.temp=temp; } public T get(){ return temp; } }
public class LianXi8 { public static void main(String[] args) { LianXi7<Integer>pool=new LianXi7<Integer>(); pool.save(new Integer(1)); Integer temp=pool.get(); System.out.println(temp); } }
Collections:集合的工具类
例
import java.util.ArrayList; import java.util.Collections; public class LianXi9 { public static void main(String[] args) { ArrayList list=new ArrayList(); Collections.addAll(list, "C","A","D","B"); System.out.println("排序前:"+list); Collections.reverse(list); System.out.println("反转后:"+list); Collections.sort(list); System.out.println("按自然排序后"+list); } }