Java-集合-未完

65 阅读2分钟

集合:

Java中的集合就像一个容器,专门用来存储Java对象(实际上是对象的引用,但习惯称为对象),这些对象可以是任意的数据类型,并且长度可变。


集合框架的体系和结构:Collection、Map

Collection:类的对象

子接口:List(序列)、Queue(队列)、Set(集)

List:

  • List是元素有序并且可以重复的集合,称为序列;
  • List可以精确的控制每个元素的插入位置,或者删除某个位置的元素;
  • 两个主要实现类:ArrayList、LinkedList。
ArrayList
  • ArrayList的底层是由数组实现的;
  • 动态增长,以满足应用程序的需求;
  • 在列表尾部插入和删除数据非常有效;
  • 更合适查找和更新元素;
  • ArrayList的元素可以为null。

Queue的实现类: LinkedList

Set的实现类: HashSet

Map:键值对

  • Map中的数据是以键值对(key-value)的形式存储的;
  • key-value以Entry的类型对象实例存在;
  • 可以通过key值快速找到value;
  • 一个映射不能包含重复的键;
  • 每个键只能映射到一个值;
  • 主要实现类:HashMap
HashMap
  • 基于哈希表的Map接口实现;
  • 允许使用null键和null值;
  • key值不允许重复;
  • HashMap的Entry对象是无序的。

code示例:

//创建
Map<String,String> animal = new HashMap<String,String>();

//添加元素
animal.put("key","value");

//输出HashMap里面的值
//1.使用迭代器
Iterator<String> it = animal.values().iterator();
while(it.hasNext) {
    System.out.println(it.next());
}

//2.使用entrySet
Set<Entry<String,String>> entrySet = animal.entrySet();
for(Entry<String,String> entry: entrySet) {
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}

//通过key查找value;keySet的使用
String strSearch = "key";
Set<String> keySet = animal.keySet();
for(String key:keySet) {
    if(strSearch.equals(key)) {
        animal.get(key);
    }
}

//判断key是否重复
String strSearch = "key";
if(animal.containsKey(strSearch)) {
     System.out.println("key重复,不可用");
} else {
    System.out.println("key不重复,可用");
}


集合排序

Sort:方法根据指定的顺序对动态数组中的元素进行排序

//整型数组
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(5);
list.add(9);

//排序:升序
Collections.sort(list);

//字符串数组
List<String> list = new ArrayList<String>();
list.add("red");
list.add("blue");
list.add("green");

//排序:ASCII码排序
Collections.sort(list);

Comparator接口:强行对某个对象进行整体排序的比较函数

//NameComparator
public class NameComparator implements Comparator<Dog> {
    @Override
    public int compare(Dog d1, Dog d2) {
        //按名字升序排序
        String name1 = d1.getName();
        String name2 = d2.getName();
        //如果name1<name2,返回负整数
        //如果name1==name2,返回0
        //如果name1>name2,返回正整数
        return name1.compareTo(name2);
    }
}

//DogTest
public class DogTest {
   public static void main(String[] args) {
       Collections.sort(dogList, new NameComparator());
   }
}

ComparaBle:强行对实现它的每个类的对象进行整体排序

//Goods
public class Goods implements ComparaBle<Goods> {
   //定义属性和get,set方法和构造方法
   ...
   
    @Override
    public int compareTo(Goods o) {
        //按价格降序排序
        double price1 = this.getPrice();
        double price2 = o.getPrice();
        //如果price1<price2,返回负整数
        //如果price1==price2,返回0
        //如果price1>price2,返回正整数
        return new Double(price2 - price1).intValue();
    }
}

//GoodsTest
public class GoodsTest {
   public static void main(String[] args) {
       ...GoodsList
       Collections.sort(GoodsList);
   }
}