JAVA基础--集合

来源:互联网 发布:环绕音乐制作软件 编辑:程序博客网 时间:2024/06/02 03:03

集合类图介绍



集合--list  

ArrayList 底层是数组,适于查询,线程不安全。

 LinkedList 底层是双向链表,适于删除与插入,线程不安全

vector 是线程安全的,但是现在很少使用它。

*List中常用方法有 add、get、clear、remove

*List中元素顺序

--List中元素顺序与加入元素的顺序相同,但是可以被改变,其中的元素允许多次重复

--List中元素顺序可以被洗牌 (打乱顺序) Collections.shuffle(list)

 --List中元素顺序可以被倒序 Collections.reverse(list)   

 --Collections.sort(list)对list元素排序。   必要条件:list中元素对象所属类是有排序规则的,如所有的基本数据类型和字符串类是都已经有排序规则。

*类实例排序规则就是使用类实现Comparable接口,重写compareTo方法并在该方法中控制排序。

*所有的基本数据类型封装类与String都已经实现了排序规则的。


遍历List方式有三种:①for循环; ②foreach; ③Iterator(迭代器);


集合--Set

HashSet:底层是Hash算法:所以查询速度快,但是没有ArrayList快。元素顺序不可预测。

TreeSet:底层是算法树:查询慢,插入快。元素顺序与排序规则有关。

set中常用的方法有add、clear、remove、size

都没有下标; 不可手动排序,元素顺序与加入的顺序无关,同一个元素不可加入多次,多次加入算同一个元素。

HashSet:元素顺序不可测,与数学上元素集合概念相同。

TreeSet:元素顺序与元素的排序规则有关。其中基本基本数据类型(布尔型除外)、String类型的数据可以排序,默认是有排序规则的类型。

HashSet与TreeSet

①HashSet可以放空,而TreeSet不能放空。

②HashSet和TreeSet都可以自动去重

③TreeSet不实现Comparable接口的话,是不能放对象等没有排序规则的元素。


遍历Set有两个方式:由于set没有下标,所以不能用for循环去遍历

①  foreach; ②  Iterator(迭代器);


集合--map

HashMap:底层是Hash算法,所以查询速度快,但是没有ArrayList快。元素顺序不可测。

TreeMap:底层算法是树,查询慢,插入快些。元素顺序与元素的键的排序规则有关。

HashTable:前面 几个都是线程不安全的,而它是线程安全的,但是已经很少用它了。

Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。


Map方法有  put(增改), clear、remove(删) , keySet, size。


不允许键重复,重复的键当修改操作。

①TreeMap中如果不重写接口,会报classCastException,而HashMap不会。

②HashMap可以放空,而Valuede 的值两个都可以放空。

③两个的put方法中,若key值相同,则是修改操作,value可重复,不影响。


map自定义去重:

 // 自定义去重的依据,不光要重载equals,还需要重载hashcode      // 去重时(发生在往set,map中加入数据时),先获取hashcode,如果hashcode与容器中现有的hashcode不重复,则不再执行equals,而直接认为该key尚未加入到容器中;      // 如果hashcode与容器中现有的hashcode重复,再去执行equals,以equals的结果为准。      @Override      public boolean equals(Object obj) {          AA tmp = (AA)obj;          if (tmp.a == this.a) {              return true;          } else {              return false;          }      }        @Override // 在往set,map容器中加入元素时,每次都会执行该函数。根据该函数的执行结果再决定是否要执行equals.      public int hashCode() {          // TODO 自动生成的方法存根          return this.a; // 如果这里统一返回0,则一定会执行equals.      }  


Map的遍历方式有两种:①  foreach; ②  Iterator(迭代器);

Map<String, Integer> map = new HashMap<>();map.put("1", 1);map.put("1", 13);map.put("2", 12);//使用foreach方式遍历mapSet<String> set = map.keySet();for (String string : set) {System.out.println(string);System.out.println(map.get(string));}
Map<String, Integer> map = new HashMap<>();map.put("1", 1);map.put("1", 13);map.put("2", 12);//使用迭代器遍历Set<String> set = map.keySet();Iterator<String> i = set.iterator();while(i.hasNext()){String temp = i.next();System.out.println(temp+" " + map.get(temp));}

关于集合使用的几个示例:

public class Test {public static void main(String[] args) throws Exception {TreeMap<Integer, String> map = new TreeMap<Integer,String>();map.put(10, "xiaoming");map.put(4, "xiaoxing");map.put(19, "xiaohua");map.put(8, "xiaocao");//Set<Integer> set = map.keySet();//for(Integer key : set){//String value = map.get(key);//System.out.println(key + " " + value);//}Set<Integer> set = map.keySet();Iterator<Integer> i = set.iterator();while(i.hasNext()){Integer i2 = i.next();String value = map.get(i2);System.out.println(i2+" "+ value);}}}
public class TreeS {public static void main(String[] args) {TreeSet<TelTree> tree = new TreeSet<TelTree>();TelTree t1 = new TelTree("匪警", "110");TelTree t2 = new TelTree("急救", "120");TelTree t3 = new TelTree("火警", "119");TelTree t4 = new TelTree("交通事故", "122");tree.add(t1);tree.add(t4);tree.add(t2);tree.add(t3);//可以自动去重tree.add(t2);//不能使用collections.sort()方法进行排序。若要排序,需要将tree装入list里面在排Iterator< TelTree> i = tree.iterator();while(i.hasNext()){TelTree temp = i.next();System.out.println(temp.name + " " + temp.num);}}}class TelTree implements Comparable<TelTree>{String name;String num;public TelTree(String name,String num) {this.name = name;this.num = num;}public TelTree() {// TODO Auto-generated constructor stub}@Overridepublic int compareTo(TelTree o) {if(o.num.compareTo(this.num)==0){return 0;}else if(o.num.compareTo(this.num) > 0){return 1;}else {return -1;}}}
public class HashS {public static void main(String[] args) {HashSet<TelHash> hash = new HashSet<TelHash>();TelHash t1 = new TelHash("匪警", "110");TelHash t2 = new TelHash("急救", "120");TelHash t3 = new TelHash("火警", "119");TelHash t4 = new TelHash("交通事故", "122");hash.add(t1);hash.add(t4);hash.add(t2);hash.add(t3);//hash也具有自动去重的功能hash.add(t2);ArrayList<TelHash> array = new ArrayList<TelHash>();array.addAll(hash);//匿名内部类Collections.sort(array,new Comparator<TelHash>() {@Overridepublic int compare(TelHash o1, TelHash o2) {if(o1.name.compareTo(o2.name) == 0){return 0;}else if(o1.name.compareTo(o2.name) > 0){return 1;}else{return -1;}}});Iterator<TelHash> i = array.iterator();while(i.hasNext()){TelHash temp = i.next();System.out.println(temp.name+temp.num);}}}class TelHash implements Comparable<TelHash>{String name;String num;public TelHash(String name,String num) {this.name = name;this.num = num;}public TelHash() {// TODO Auto-generated constructor stub}@Overridepublic int compareTo(TelHash o) {if(o.name.compareTo(this.name)==0){return 0;}else if(o.name.compareTo(this.name) > 0){return 1;}else {return -1;}}}
import java.util.*;import java.util.Map.*;public class Test {public static void main(String[] args) throws Exception {Person p1 = new Person("Tom");Person p2 = new Person("Jery");Person p3 = new Person("Lucy");Person p4 = new Person("Mary");HashMap<Person, Integer> hash = new HashMap<>();//key不能够放null,会报NullPointerException错误//hash.put(null, 10);hash.put(p1, 10);//value可以放nullhash.put(p2, null);hash.put(p3, 100);hash.put(p4, 1);//重复的键当修改用。。。//hash.put(p3, 109);hash.put(new Person("Cock"),100);//key的值重复是当修改用,而value 的值是可以重复的,不影响。。。Set<Person> set = hash.keySet();Iterator<Person> i = set.iterator();while(i.hasNext()){Person temp = i.next();System.out.println(temp.name+" " + hash.get(temp));}}}class Person{String name;public Person(String name){this.name = name;}}class Person2 implements Comparator<Person>{@Overridepublic int compare(Person o1, Person o2) {if(o1.name.compareTo(o2.name) == 0){return 0;}else if(o1.name.compareTo(o2.name) > 0){return 1;}else {return -1;}}}
import java.io.*;import java.util.*;public class Test2 {public static void main(String[] args) throws Exception {ArrayList<String> array = new ArrayList();array = InputStream();List<Tel> arrayT = new ArrayList<Tel>();Iterator<String> i = array.iterator();while (i.hasNext()) {String[] s = i.next().split("-");if (s.length > 1)arrayT.add(new Tel(s[0], s[1]));}// Sort1(arrayT);//按照电话号码的大小来排//Collections.sort(arrayT);;// 按照电话来排// Collections.sort(arrayT,new CTel());// 按照姓名来排//Collections.sort(arrayT, new CTelName());//用匿名内部类实现。。。。Collections.sort(arrayT,new Comparator<Tel>() {@Overridepublic int compare(Tel o1, Tel o2) {if (o1.num.compareTo(o2.num) == 0) {return 0;} else if (o1.num.compareTo(o2.num) > 0) {return 1;} else {return -1;}}});//用HashSet来存储。。。//HashSet(arrayT);//用TreeSet来存储。。。//TreeSet(arrayT);Iterator<Tel> i2 = arrayT.iterator();while (i2.hasNext()) {Tel t = i2.next();System.out.println(t.name + " " + t.num);}}public static void TreeSet(List<Tel> array){TreeSet<Tel> tree = new TreeSet<Tel>();Iterator<Tel> i = array.iterator();while(i.hasNext()){tree.add(i.next());}Iterator<Tel> i2 = tree.iterator();System.out.println("使用treeSet存储。。。");while(i2.hasNext()){Tel t = i2.next();System.out.println(t.name + "  "+ t.num);}}public static void HashSet(List<Tel> array){HashSet<Tel> hash = new HashSet<Tel>();Iterator<Tel> i = array.iterator();while(i.hasNext()){hash.add(i.next());}Iterator<Tel> i2 = hash.iterator();while(i2.hasNext()){Tel t = i2.next();System.out.println(t.name + "   " + t.num);}}public static void Sort1(List<Tel> arrayT) {List<String> a1 = new ArrayList<>();List<String> a2 = new ArrayList<>();Iterator<Tel> i2 = arrayT.iterator();while (i2.hasNext()) {Tel t = i2.next();a1.add(t.name);a2.add(t.num);}Collections.sort(a1);// Collections.sort(a2);Iterator<String> i = a1.iterator();while (i.hasNext()) {System.out.println(i.next());}}public static ArrayList InputStream() throws Exception {File file = new File("F:\\电话.txt");InputStream in = new FileInputStream(file);Reader read = new FileReader(file);BufferedReader br = new BufferedReader(read);br.readLine();String s;char[] c = new char[1024];ArrayList array = new ArrayList();while ((s = br.readLine()) != null) {array.add(s);}in.close();return array;}}class Tel implements Comparable<Tel> {String name;String num;public Tel() {}public Tel(String name, String num) {this.name = name;this.num = num;}@Overridepublic int compareTo(Tel o) {if(Integer.valueOf(o.num) == 0){return 0;}else if(Integer.valueOf(o.num) > 0){return 1;}else {return -1;}}}class CTel implements Comparator<Tel> {@Overridepublic int compare(Tel o1, Tel o2) {if (o1.num.compareTo(o2.num) == 0) {return 0;} else if (o1.num.compareTo(o2.num) > 0) {return 1;} else {return -1;}}}class CTelName implements Comparator<Tel> {@Overridepublic int compare(Tel o1, Tel o2) {if (o1.name.compareTo(o2.name) == 0) {return 0;} else if (o1.name.compareTo(o2.name) > 0) {return 1;} else {return -1;}}}
import java.util.Map.Entry;import java.util.*;public class Test2 {public static void main(String[] args) throws Exception {//treeMap中不能够放null,放空会报NullPointerException//TreeMap中如果不重写接口,会报ClassCastExcetionTreeMap<Person, Integer> map = new TreeMap<Person, Integer>();Person p1 = new Person("Tom");Person p2 = new Person("Jery");Person p3 = new Person("Lucy");Person p4 = new Person("Mary");map.put(p1, 6);map.put(p2, 1);map.put(p3, 8);map.put(p4, 10);//map.put(10, "xiaoming");//map.put(4, "xiaoxing");//map.put(19, "xiaohua");//map.put(8, "xiaocao");//Set<Person> set = map.keySet();////for(Person key : set){//Integer value = map.get(key);//System.out.println(key.name + " " + value);//}//Set<Person> set = map.keySet();//Iterator<Person> i = set.iterator();//while(i.hasNext()){//Person i2 = i.next();//int value = map.get(i2);//System.out.println(i2.name+" "+ value);//}//用Entry可以封装多个类型Set<Entry<Person, Integer>> set = map.entrySet();Iterator i = set.iterator();while(i.hasNext()){Entry temp = (Entry) i.next();System.out.println(((Person)temp.getKey()).name + " " + map.get(temp.getKey()));}}}class Person implements Comparable<Person>{String name;public Person(String name){this.name = name;}@Overridepublic int compareTo(Person o) {if(o.name.compareTo(this.name) == 0){return 0;}else if(o.name.compareTo(this.name) > 0){return 1;}else {return -1;}}}


原创粉丝点击