Java集合
来源:互联网 发布:数据库原理视频 编辑:程序博客网 时间:2024/05/16 13:00
- 集合是一个存储对象的容器,只存储对象,不能存储基本的数据类型。集合的长度是可变的,数组的长度是固定的。
- 集合派系
- List派系
这个派系可以存储重复元素,是一个有序的集合,存储在List的对象,都有下标- ArrayList 是一个容器,底层是数组实现,初始化容量为10,每次增长50%,线程不同步的集合,查询快,增删慢
- List派系
import java.util.ArrayList;import java.util.Iterator;public class Demo { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("zhangsan"); arrayList.add("lisi"); arrayList.add("wangwu"); arrayList.add("zhaoliu"); Iterator<String> iterator = arrayList.iterator(); //使用迭代器进行遍历 while(iterator.hasNext()) { System.out.println(iterator.next()); } }}
- LinkedList 存储对象底层采用链表数据结构,线程不同步的集合,查询慢,增删快
import java.util.LinkedList;import java.util.Iterator;public class Demo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<String>(); linkedList.add("zhangsan"); linkedList.add("lisi"); linkedList.add("wangwu"); linkedList.add("zhaoliu"); Iterator<String> iterator = linkedList.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } }}
- set派系
不允许存储重复的元素,去掉set中的重复元素是依据hashCode和equals方法实现的。是一个无序的,存储到set集合中的对象没有下标- HashSet 底层结构是哈希表结构线程不同步的
import java.util.HashSet;import java.util.Iterator;public class Demo { public static void main(String[] args) { HashSet<Person> hashCode = new HashSet<Person>(); hashCode.add(new Person("hansan",1)); hashCode.add(new Person("hansan",1)); hashCode.add(new Person("lisi",1)); hashCode.add(new Person("wangwu",3)); hashCode.add(new Person("zhaoliu",2)); Iterator<Person> iterator = hashCode.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next().toString()); } }}class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public String toString() { return name + "---" + age; } /** *去重复,是使用hashCode和equals方法 *如果hasCode相等,则比较再用equals方法进行比较 */ public int hashCode() { return name.hashCode() + age; } public boolean equals(Object object) { if(this == object) { return true; } if(object instanceof Person) { return name.equals(((Person)object).name) && age == ((Person)object).age; } return false; }}
- TreeSet底层数据结构是二叉树,线程不同步,对于存储到集合中的元素进行自然排序,对对象必须实现comparable接口进行,自然排序,TreeSet也可以自己实现比较器
import java.util.TreeSet;import java.util.Iterator;public class Demo { public static void main(String[] args) { TreeSet<Person> treeCode = new TreeSet<Person>(); treeCode.add(new Person("hansan",1)); treeCode.add(new Person("hansan",1)); treeCode.add(new Person("lisi",1)); treeCode.add(new Person("wangwu",3)); treeCode.add(new Person("zhaoliu",2)); Iterator<Person> iterator = treeCode.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next().toString()); } }}class Person implements Comparable<Person>{ private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public String toString() { return name + "---" + age; } //使用Comparable接口中的compareTo方法进行排序 public int compareTo(Person p) { int num = name.compareTo(p.name); return num == 0 ? age - p.age : num; } }
- Map 存储键值对
存储两个对象,一个叫键,一个叫值,一个键对应一个值,键不允许重复,值可以重复- TreeMap
底层是红黑树,对于存储键,也进行自然排序
-HashMap
底层是哈希表结构,线程不同步,可以存储null值和null键
-HashMap
底层是哈希表结构,线程同步,不可以存储null值和null键
- TreeMap
/***HashMap取值的两种方式**/import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class Demo { public static void main(String[] args) { HashMap<String,Integer> hm = new HashMap<String,Integer>(); hm.put("zhangsan",22); hm.put("lisi",24); hm.put("wnagwu",23); hm.put("zhaoliu",22); //Map集合第一种取元素的方式 //通过Map集合的keySet()将键的集合存到Set集合中 Set<String> set1 = hm.keySet(); Iterator<String> iterator1 = set1.iterator(); while(iterator1.hasNext()) { String key = iterator1.next(); System.out.println(key + "----" + hm.get(key)); } //第二种 //通过Map.Entry这个类取出键值关系 Set<Map.Entry<String,Integer>> set2 = hm.entrySet(); Iterator<Map.Entry<String,Integer>> iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry<String,Integer> entry = iterator2.next(); System.out.println(entry.getKey() + entry.getValue()); } }}
小例子:计算字符串中字符出现的个数
/***计算字符串中字符出现的个数,利用TreeMap实现**/import java.util.TreeMap;import java.util.Set;import java.util.Iterator;public class Demo { public static void main(String[] args) { String s = "jafjkd;afa"; CalNumOfChar cal = new CalNumOfChar(s); printTreeMap(cal.calNumOfChar()); } public static void printTreeMap(TreeMap<Character,Integer> tm) { Set<Character> set= tm.keySet(); Iterator<Character> iterator = set.iterator(); while(iterator.hasNext()) { Character key = iterator.next(); System.out.println(key + "---" + tm.get(key)); } }}class CalNumOfChar { private String str = ""; private TreeMap<Character,Integer> tm ; public CalNumOfChar(String str) { this.str = str; } public TreeMap<Character,Integer> calNumOfChar() { char[] chars = str.toCharArray(); tm = new TreeMap<Character,Integer>(); for(int i = 0; i < chars.length; i++) { Integer num = tm.get(chars[i]); if(num == null) { tm.put(chars[i],1); }else { num++; tm.put(chars[i],num); } } return tm; }}
0 0
- Java集合:集合框架
- java集合---set集合
- JAVA 集合 的 集合
- 【集合】Java集合对比
- JAVA集合-Map集合
- JAVA集合-Set集合
- JAVA集合-List集合
- java集合------Map集合
- Java集合----List集合
- Java集合----Set集合
- Java集合----Map集合
- JAVA集合
- JAVA集合
- Java集合
- JAVA集合
- Java集合
- Java集合
- java 集合
- Java并发容器并发集合
- 标准IO缓冲与fork问题
- YUM安装遇到问题:File"/usr/bin/yum", line 29, in <module> File"/usr/share/yum-cli/yummain.py", line 276, in
- 杭电OJ-2093_考试排名
- Caffe学习:使用pycaffe生成mean_file.py文件
- Java集合
- POJ 1679 The Unique MST(最小生成树--prime||次小生成树)
- 1004. 成绩排名 (20)
- VS2015+OpenCV3.0配置教程
- Atitit.获取主板与bios序列号获取硬件设备信息 Wmi wmic 的作用
- 【转】一节天文课
- mysql java.sql.SQLException: Unknown system variable 'language'
- 广告联盟刷流量方法
- flashback