集合 和 泛型
来源:互联网 发布:pdf转mobi软件 编辑:程序博客网 时间:2024/06/03 06:38
集合框架
List、Set是Collection接口的子接口。
- Collection 接口存储一组不唯一,无序的对象;
- List 接口存储一组 不唯一、有序(插入顺序)的对象;
- set 接口存储一组唯一,无序的对象。
Map 不继承COllection,接口存储一组键值对象,提供到key到value的映射。
List接口
- ArrayList 和 LikedLiet是List的实现类
- ArrayList 实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
- LinkedList 采用链表存储方式。插入、删除元素时效率。
ArrayList
- ArrayList 的构造方法
- ArrayList (int size);
- ArrayList (Colection c);
- ArrayList ();
- ArrayList 的常用方法 。
- .add();
- .remove(); //可以是index和Object类型。Object移除第一次出现的指定元素。
- .indexOf(“ab”);
- .lastIndexOf(“a”);
- .size();
- .get(index);
- .set(idnex,obj); //修改集合的数值
- .contains(Object o) //list是否包含对象o;
- .clear //移除所有元素;
ArrayList list = new ArrayList();list.add("aaa");list.add("ccc");list.add(2,"ccc");for (int i=0;i<list.size();i++) { String obj =(String) list.get(i); System.out.orintln(obj);}list.set(1,"bbb"); //集合的修改。list.remove(2); //通过索引删除集合的值。list.remove("ccc") 通过值删除System.out.println(); for (Object obj:list){ System.out.println(obj);}
LikedList
- 可以添加头条和最末顺序。
- LinkedList类是List接口的一个具体实现类
- LinkedList类用于创建链表数据结构
- 插入后者删除元素时,它提供更好的心能
LikedList常用方法
.addFirst(Object o) 在列表首部添加元素
.addLast(Object o) 在列表的末尾添加元素
.getFirst() 返回列表中的第一个元素
.getLast() 返回Object;
.removeFirst() 返回Object;
.removeLast() 返回Object;
.size();
Set接口
- Set接口存储一组唯一,无序的对象
- HashSet是Set接口常用的实现类
- Set中存放对象的引用
HashSet
- 无序的集合遍历方法。
- 遍历方法1:通过for eatch进行遍历
for (Object obj :hashset){
String str = (HashSet)obj;
System.out.println(str);
} - 遍历方法2:通过迭代器进行遍历
Iterator iterator = hashset.iterator();
while(iterator.hasNext()){
Object obj= iterator.next();
String str = (String)obj;
System.out.println(str);
}
示例:
- 遍历方法1:通过for eatch进行遍历
import java.util.HashSet;import java.util.Iterator;/** * 创建一个Dog类 * @author Wondf * */class Dog{ private String name; private String type; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Dog() { } public Dog(String name, String type) { super(); this.name = name; this.type = type; } public String toString() { return "Dog [name=" + name + ", type=" + type + "]"; }}public class DogHashSet { public static void main(String[] args) { HashSet<Dog> hashSet = new HashSet<Dog>(); for (int i = 0; i < 100; i++) { Dog dog = new Dog("name"+i,"Dog"+i); hashSet.add(dog); } System.out.println("forEach遍历"); showForEach(hashSet); System.out.println("迭代器遍历"); showIterator(hashSet); } private static void showIterator(HashSet<Dog> hashSet){ Iterator<Dog> iterator = hashSet.iterator(); while (iterator.hasNext()){ Dog dog = iterator.next(); System.out.println(dog); } } private static void showForEach(HashSet<Dog> hashSet) { for (Dog dog :hashSet){ System.out.println(dog); } }}
HashMap
- 实现了Map接口
- 用于存储键/值映射关系;
- 不能保证其元素的存储顺序。
- HashCode
- 无索引的概念
- key键值唯一,可以null,但只能一个。
HashMap()的常用构造方法和方法
- .put(key,value); //添加、修改。- .size(); //返回元素的个数- .get(key); //根据键返回相关联的值,如果不存在指定的键,返回null- .keySet() //返回Set,键的集合- .values //返回Collection,值的集合
遍历实例:
import java.util.HashMap;import java.util.Iterator;import java.util.Scanner;import java.util.Set;/** * 创建Student 类 * @author Wondf * */class Student { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Student(){ super(); } public Student(String name, String sex) { super(); this.name = name; this.sex = sex; } @Override public String toString() { return "Student [name=" + name + ", sex=" + sex + "]"; }}public class JobHashMap { public static void main(String[] args) { HashMap<String, Student> hashMap = new HashMap<String, Student>(); for (int i = 0; i < 5; i++) { Student student = new Student("nanme" + i, "男"); hashMap.put("enName" + i, student); } System.out.println("请输入要查找的学员英文名称:"); Scanner scanner = new Scanner(System.in); String enName = scanner.next(); Student student = hashMap.get(enName); System.out.println("你查找的学员信息为:" + "\n" + student); System.out.println("*****************"); System.out.println("增强for遍历"); for (String key : hashMap.keySet()) { Student stu = hashMap.get(key); System.out.println(stu); } System.out.println("迭代器遍历"); Set<String> keySet = hashMap.keySet(); Iterator<String> iterator = keySet.iterator(); while (iterator.hasNext()) { String obj = iterator.next(); Student stu = hashMap.get(obj); System.out.println(stu); } }}
另:按顺序查找,可以先建立一个ArrayList,将HashMap的值存放在里面,然后进行遍历
Iterator 迭代器
.hasNext(); //返回 boolean,如果仍有元素可以迭代,则返回true。 .next(); //E 返回迭代的下一个元素。 .remove(); //从迭代器指向的collection中移除迭代器返回的最最后一个元素。
Java的容器类引申
泛型
泛型集合
- 泛型集合可以约束集合内的元素类型
集合+泛型 ==> 泛型集合
安全性,提高效率。
- ArrayList <Integer> = new ArrayList <Integer> (); //类型必须是包装类 - HashMap <String,String> = new HashMap <String,string>();
- 接口不能被实例化,只能通过他的实现类进行实例.
//HashMap的遍历方法2:
for (Map.Entry<String,student> entry :list.entrySet()){
String key =entity.getKey();
Student value =entity.getValue();
System.out.println("key="+key+",value+"+value);
}
泛型类
public classs pair<T> { <T> max ; <T> min ; }
泛型方法
要定义泛型方法,只需将泛型参数列表置于返回值前。如:
//extends 在这是实现了Comporable的接口,而不是继承。 public static <T extends Comparable> pair <T> minMax(T [] nums){ mMax.compareTO(nums[i])>0 }
compareTo()
- 泛型在使用中的一些规则和限制:
- 泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
- 同一中类型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
- 泛型的类型参数可以有多个。
- 泛型的参数类型可以使用extends语句,习惯上称为“有界类型”。 pair .
- 泛型的参数类型还可以是通配符类型。例如:Class
0 0
- 集合 和 泛型
- 泛型(Generics)和集合
- 网络连接和集合、泛型
- 集合框架和集合
- 黑马程序员 泛型、Set集合类和Map集合类
- JAVA集合框架和集合
- HashSet集合和TreeSet集合
- HashMap集合和TreeMap集合
- 有序集合和无序集合
- Set集合和List集合
- 集合和泛型9-----泛型
- Java 泛型 和 集合的嵌套
- 集合成员和关系
- 操作集合和字符串
- 集合成员和关系
- 集合和泛型
- 集合接口和类型
- 映像和集合类型
- H5初学
- 目前遇到的matlab的一些函数用法
- 【Matlab】Matlab中几个数值积分函数的比较和优缺点
- 网页版2048-原型、原型链的应用
- 最简单的openCV语言,读取和显示一张图片
- 集合 和 泛型
- C#102课的主要内容
- 用CSS实现布局(两栏布局,多栏布局)
- QtGUI总结
- C#访问远程主机资源的方法
- 对于刚找工作的程序员,我们该如何选择高工资与学习机会?
- 【51nod】1247 可能的路径
- Android 解析XML(DOM解析,SAX解析,PULL解析)
- 【Matlab】积分