java基础复习-map与collection set+list集合总结
来源:互联网 发布:淘宝店如何装修 编辑:程序博客网 时间:2024/04/28 00:17
-------------MAP Map<K,V>成对出现,K唯一,V可重复。 举例: 学号 姓名----HashMap特点:无序 建立集合: Map<String,String> map = new HashMap<String,String> 添加元素: map.put("邓超","孙俪") 返回上一个值(后面那个) 移除元素: map.clear(); 移除所有元素 map.remove("K"); 移除键值K,附带移除对应的值V 判断: 是否包含 map.containskey("K"); 是否为空 map.isEmpty(); 长度: map.size(); 判断集合MAP有多少对元素 获取: map.get(K) 返回K对应的V 遍历集合所有的键: Set<类型> *** = map.keySet(); for(String **:***){ syso(**); } 遍历集合所有的值: Collection <类型> *** =map.values(); 增强for 遍历所有的对: 第一种: 先遍历键K,在增强for中获取V:string * =map.get(key); syso(key +"-----" + value) ; 第二种:(理解) // 获取所有键值对对象的集合 Set<Map.Entry<String, String>> set = map.entrySet(); // 遍历键值对对象的集合,得到每一个键值对对象 for (Map.Entry<String, String> me : set) { // 根据键值对对象获取键和值 String key = me.getKey(); String value = me.getValue(); System.out.println(key + "---" + value);----------LinkHashMap:有序(存储序列)唯一----------TreeMap : 自然排序 唯一 例题:treemapdemo 对于key是类对象,需要重写方法。 案例: public class TreeMapDemo2 {public static void main(String[] args) {// 创建集合对象TreeMap<Student, String> tm = new TreeMap<Student, String>(new Comparator<Student>() {public int compare(Student s1, Student s2) {// 主要条件int num = s1.getAge() - s2.getAge();// 次要条件int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;return num2;}});// 创建学生对象Student s1 = new Student("潘安", 30);...............-------------------------------------嵌套 hashmap-hashmap 例题:hashmapdemo2.java hashmap-arraylist 自己写,简单 综合嵌套 看例题 hashmapdemo.java----------------------------------- * 1:Hashtable和HashMap的区别? * Hashtable:线程安全,效率低。不允许null键和null值 * HashMap:线程不安全,效率高。允许null键和null值---------------------------------2:List,Set,Map等接口是否都继承子Map接口? * List,Set不是继承自Map接口,它们继承自Collection接口 * Map接口本身就是一个顶层接口-------------------------------------collections 集合 Collections.sort(list);排序 默认情况下是自然顺序。 Collections.binarySearch(list, 30);二分查找 Collections.max(list);最大值 Collections.reverse(list);反转 Collections.shuffle(list);随机置换 -------- 同时出现自然排序和比较器排序,以比较器为主--------------------------- * 模拟斗地主洗牌和发牌 * * 分析: * A:创建一个牌盒 * B:装牌 * C:洗牌 * D:发牌 * E:看牌 例题:PokerDemo.java 地址http://download.csdn.net/detail/qq_34446485/9921208 其他同Collection:是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。(后面会慢慢的讲解) * * Collection的功能概述: * 1:添加功能 * boolean add(Object obj):添加一个元素 * boolean addAll(Collection c):添加一个集合的元素 * 2:删除功能 * void clear():移除所有元素 * boolean remove(Object o):移除一个元素 * boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有) * 3:判断功能 * boolean contains(Object o):判断集合中是否包含指定的元素 * boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有) * boolean isEmpty():判断集合是否为空 * 4:获取功能 * Iterator<E> iterator()(重点) * 5:长度功能 * int size():元素的个数 * 面试题:数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢? * 6:交集功能 * boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢? * 7:把集合转换为数组 * Object[] toArray()-------------------------- // Collection c = new Collection(); //错误,因为接口不能实例化Collection c = new ArrayList();char[] chs =s.toCharArray(); toCharArray -把字符串转换成字符数组16课时. 建立一个集合 (list集合)-------------------------(arraylist) 泛型:在引用和重写后+类型<>,可避免强转,优化程序 ArrayList ** =new ArrayList(); add 添加遍历 :(用了泛型) 1. Iterator<String> *** =**.iterator<String>(); while(it.hasNext()){ String * =***.next(); //存储的对象是什么,用什么接收。-双String- System.out.println(*); } 2.for(int x=0;x<array.size();x++){ String * =(String)array.get(x); //存储的对象是什么,用什么接收。-双String- System.out.println(*);}ArrayList去除集合中字符串的重复值: 注:方法1中如果集合对象是一个类,则需在引用的类中重写equals方法,否则报错 1. // 创建新集合ArrayList newArray = new ArrayList();// 遍历旧集合,获取得到每一个元素Iterator it = array.iterator();while (it.hasNext()) {String s = (String) it.next();// 拿这个元素到新集合去找,看有没有if (!newArray.contains(s)) {newArray.add(s);}} 2.// 由选择排序思想引入,我们就可以通过这种思想做这个题目// 拿0索引的依次和后面的比较,有就把后的干掉// 同理,拿1索引...for (int x = 0; x < array.size() - 1; x++) {for (int y = x + 1; y < array.size(); y++) {if (array.get(x).equals(array.get(y))) {array.remove(y);y--;}}}-----------------------------(vector) add get Iterator 等对应,可替换// 创建集合对象Vector v = new Vector();// 添加功能v.addElement("hello");v.addElement("world");v.addElement("java"); 遍历:1.for (int x = 0; x < v.size(); x++) {String s = (String) v.elementAt(x);System.out.println(s);} 2.Enumeration en = v.elements(); // 返回的是实现类的对象while (en.hasMoreElements()) {String s = (String) en.nextElement();System.out.println(s);}}--------------------------(LinkedList) remove移除的元素会被返回 LinkedList link = new LinkedList(); // 创建集合对象 link.addFirst("javaee"); link.addLast("android"); System.out.println("getFirst:" + link.getFirst()); System.out.println("getLast:" + link.getLast()); System.out.println("removeFirst:" + link.removeFirst()); System.out.println("removeLast:" + link.removeLast()); 遍历通用-----------------------------------------------------------------------------------------泛型: 1.用在类 (在实现的时候需要每次注明类型) public class ObjectTool<T> { private T obj; 用法: ObjectTool<String> ot = new ObjectTool<String>();ot.setObj(new String("林青霞"));String s = ot.getObj();System.out.println("姓名是:" + s);ObjectTool<Integer> ot2 = new ObjectTool<Integer>();ot2.setObj(new Integer(27));Integer i = ot2.getObj();System.out.println("年龄是:" + i); 2.用在方法上 (无论什么类型直接引用,无需注明) public <T> void show(T t) {System.out.println(t);} 用法:ObjectTool ot = new ObjectTool();ot.show("hello");ot.show(100);ot.show(true); 3.用在接口上 写接口 public interface Inter<T> { public abstract void show(T t); } 写类 --第一种情况:已经知道该是什么类型的了 //public class InterImpl implements Inter<String> { //public void show(String t) { //System.out.println(t); //} // } --第二种情况:还不知道是什么类型的 public class InterImpl<T> implements Inter<T> { public void show(T t) { System.out.println(t); } } 测试 public static void main(String[] args) {// 第一种情况的测试 <>与引用类一致// Inter<String> i = new InterImpl();// i.show("hello");// // 第二种情况的测试Inter<String> i = new InterImpl<String>();i.show("hello");Inter<Integer> ii = new InterImpl<Integer>();ii.show(100);}----------- 泛型高级(通配符) // 泛型如果明确的写的时候,前后必须一致(//后的是报错的)Collection<Object> c1 = new ArrayList<Object>();// Collection<Object> c2 = new ArrayList<Animal>();// Collection<Object> c3 = new ArrayList<Dog>();// Collection<Object> c4 = new ArrayList<Cat>();// ?表示任意的类型都是可以的Collection<?> c5 = new ArrayList<Object>();Collection<?> c6 = new ArrayList<Animal>();Collection<?> c7 = new ArrayList<Dog>();Collection<?> c8 = new ArrayList<Cat>();// ? extends E:向下限定,E及其子类// Collection<? extends Animal> c9 = new ArrayList<Object>();Collection<? extends Animal> c10 = new ArrayList<Animal>();Collection<? extends Animal> c11 = new ArrayList<Dog>();Collection<? extends Animal> c12 = new ArrayList<Cat>();// ? super E:向上限定,E极其父类Collection<? super Animal> c13 = new ArrayList<Object>();Collection<? super Animal> c14 = new ArrayList<Animal>();// Collection<? super Animal> c15 = new ArrayList<Dog>();// Collection<? super Animal> c16 = new ArrayList<Cat>();}}class Animal {}class Dog extends Animal {}class Cat extends Animal {} jdk5新特性---------------------------------------------------------------------------------------- -------------------------------------增强for:for(元素类型 *:数组或集合){ system.out.println(*);}//用来给数组或者集合遍历,及其简单,但是对于数组或者集合不能为空,(null ), 解决办法,加一个if判断。 if(数组 !=null){} 。一般用来替代集合迭代器------------------------------------------------------------------------------------ ---------------------------静态导入(一般不用,非静态方法不能用,错误多) 格式:import static 包名.类名.方法名. 用的时候可直接引用方法 ------------------------------------------------------------------------------------ -------------------可变参数格式: 修饰符 +返回值类型+方法名+(数据类型...+变量名){} 比如 public static int sum (int...a){ int s=0; for(int x:a){ s +=x; //a相当于一个数组,遍历后自家,用于不知道多少个数 } //的变量相加(左边的方法) return s; }----------------------------------------------------------------------------------------- --------------------数组转集合-------这种转化的集合不能增删,但是能改 保留了数组的特性:长度不变 import java.util.Arrays; List<String> list = Arrays.asList(数组名字或者直接多个元素)----------------------------------------------------------------------------------------- ------------------嵌套集合 // 创建大集合ArrayList<ArrayList<Student>> bigArrayList =new ArrayList<ArrayList<Student>>(); // 分别创建小集合ArrayList<Student> firstArrayList = new ArrayList<Student>(); // 遍历嵌套集合for (ArrayList<Student> array : bigArrayList) {for (Student s : array) {System.out.println(s.getName() + "---" + s.getAge());}}---------------------------------------------------------------------------------------- -----------------例题import java.util.ArrayList; import java.util.Random; * 获取10个1-20之间的随机数,要求不能重复 * * 用数组实现,但是数组的长度是固定的,长度不好确定。 * 所以我们使用集合实现。 * // random:该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间 // contains:包含就返回true equals:相等返回true * 分析: * A:创建产生随机数的对象 * B:创建一个存储随机数的集合。 * C:定义一个统计变量。从0开始。 * D:判断统计遍历是否小于10 * 是:先产生一个随机数,判断该随机数在集合中是否存在。 * 如果不存在:就添加,统计变量++。 * 如果存在:就不搭理它。 * 否:不搭理它 * E:遍历集合 */public class RandomDemo {public static void main(String[] args) {// 创建产生随机数的对象Random r = new Random();// 创建一个存储随机数的集合。ArrayList<Integer> array = new ArrayList<Integer>();// 定义一个统计变量。从0开始。int count = 0;// 判断统计遍历是否小于10while (count < 10) {//先产生一个随机数int number = r.nextInt(20) + 1;//判断该随机数在集合中是否存在。if(!array.contains(number)){//如果不存在:就添加,统计变量++。array.add(number);count++;}}//遍历集合for(Integer i : array){System.out.println(i);}}}---------------------------------------------------------------------------------------- -----------------例题import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;/* * 键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值 * * 分析: * A:创建键盘录入数据对象 * B:键盘录入多个数据,我们不知道多少个,所以用集合存储 * C:以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了 * D:把集合转成数组 * E:对数组排序 * F:获取该数组中的最大索引的值 */public class ArrayListDemo {public static void main(String[] args) {// 创建键盘录入数据对象Scanner sc = new Scanner(System.in);// 键盘录入多个数据,我们不知道多少个,所以用集合存储ArrayList<Integer> array = new ArrayList<Integer>();// 以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了while (true) {System.out.println("请输入数据:");int number = sc.nextInt();if (number != 0) {array.add(number);} else {break;}}// 把集合转成数组// public <T> T[] toArray(T[] a)Integer[] i = new Integer[array.size()];array.toArray(i);// 对数组排序// public static void sort(Object[] a)Arrays.sort(i);// 获取该数组中的最大索引的值System.out.println("数组是:" + arrayToString(i) + "最大值是:"+ i[i.length - 1]);}public static String arrayToString(Integer[] i) {StringBuilder sb = new StringBuilder();sb.append("[");for (int x = 0; x < i.length; x++) {if (x == i.length - 1) {sb.append(i[x]);} else {sb.append(i[x]).append(", ");}}sb.append("]");return sb.toString();}}-------------------------------------------------------------------------------------- set集合list集合 :有序,可重复set集合:无序,唯一 ----------------------HashSet (每次迭代的顺序都有可能变化) 创建集合: HashSet<类型> set = new HashSet<类型>(); 其余和list集合一样 ---------注意: 当set对象是一个类,而不是普通int等类型,需要在类中重写哈希值和equals方法,ALT+ SHIFT+S (自动生成) 。否则会出现重复元素----------------------LinkedHashSet集合: 元素顺序迭代不变,怎么存储怎么遍历 LinkedHashSet<> ** = new LinkedHashSet<>(); ----------------------TreeSet集合: 根据自然排序或者 比较器排序 TreeSet<> * = new TreeSet<>(); 如果存储元素是int类型,默认采用自然排序,但是当元素类型为引用类 则需要在类里导入接口----implements Comparable<类名(类型)> 然后在末尾重写方法 (返回值<0从大到小,=0只导入第一个元素,>0从小到大) ---public int compareTo(student s) {// 主要条件 姓名的长度int num = this.name.length() - s.name.length();// 姓名的长度相同,不代表姓名的内容相同int num2 = num == 0 ? this.name.compareTo(s.name) : num;// 姓名的长度和内容相同,不代表年龄相同,所以还得继续判断年龄int num3 = num2 == 0 ? this.age - s.age : num2;return num3;}
阅读全文
0 0
- java基础复习-map与collection set+list集合总结
- JAVA基础-Collection中List,Set,Map的比较总结
- java中的Collection集合 List Set Map
- java 集合 list map set collection
- java集合类,collection,list,set,map
- java中的Collection集合 List Set Map
- java集合之Collection---set/map/list
- Java基础-集合Collection-List-Map
- java基础之集合(Set,Map,List)总结
- java 集合架构--[Collection] [List] [Set] [Map] [集合工具类]
- java 集合架构--[Collection] [List] [Set] [Map] [集合工具类]
- java 集合架构--[Collection] [List] [Set] [Map] [集合工具类]
- 集合框架总结——Collection、Iterator、List、Set、Map
- java 集合类(collection(list set) map)学习总结
- Java集合List,Set,Map基础
- Java集合List,Set,Map基础
- java基础:集合类型set,list,map
- java 的集合。Collection List Set Map 区别
- 51Nod-1859-Clarke and number
- FFmpeg运行出现的错误
- 【深度学习】笔记17 windows下SSD网络在caffe中的配置(GPU版本)【笔记3】
- linux下串口(serial)和串口驱动
- MS Word 组件Spire.Doc V6.0.5发布 | 修复了rtf 到pdf 的转换问题
- java基础复习-map与collection set+list集合总结
- python去除扩展名
- Kinect+Unity实现虚拟人物动作同步
- IntelliJ IDEA 注册码
- what we need to learn durning the period of bigdata(数据科学家)
- 2017 Multi-University Training Contest
- 51nod1076 2条不相交的路径
- [编程题] 庆祝61
- POJ-3494--Largest Submatrix of All 1’s---单调栈的应用