集合 和 泛型

集合框架

集合框架

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);
      }

      示例:
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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值