5,集合框架

集合框架:对象容器

集合中存储的都是引用类型的元素,那么引用类型变量实际上存储的是对象的“地址”,所以实际上集合只存储了元素对象在堆中

的地址。而并不是将对象本身存入了集合中。

Collection-Collections区别?

List

ArrayList

LinckedList

Set

HashSet->HashMap

LinckedHashSet->链表

Map

HashMap->16*x

LinckedHashMap

HashTable

队列和栈

Queue

Deque

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

package caokangnsd;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;


public class CollectionAndMap {
/*

* 集合 Collection 

* |                           | 

* List                        Set 

* |         |          |      |       |         | 

* Arraylist LinkedList Vector HashSet SortedSet LinkedHashSet 

* |                                   | 

* Stack                               TreeSet
*
*
* Map | | | | Hashtable HashMap LinkedHashMap SortedMap | TreeMap 链表和散列表,哈希算法

* 1,集合中的方法 2,数组加入 3,sort 4,存储参考图片

*/

public static void main(String[] args) {

// 首先建立一个存在的集合

Collection<String> ex = new ArrayList<String>();// String对象的集合

ex.add("A");

ex.add("B");

System.out.println(Arrays.toString(ex.toArray()));

// 分别创建不同类型的集合

List<String> arraylist = new ArrayList<String>();

List<String> linkedlist = new LinkedList<String>();

Set<String> hashset = new HashSet<String>();

Set<String> linkedhashset = new LinkedHashSet<String>();

Map<String, String> hashmap = new HashMap<String, String>();
//
// clear,size,isEmpty
// add,addAll

arraylist.add("one");

hashset.add("one");

arraylist.add("two");

hashset.add("two");

arraylist.addAll(ex);

hashset.addAll(ex);

arraylist.add(2, "three");

System.out.println(arraylist);

System.out.println(hashset);

linkedhashset = new LinkedHashSet<String>(arraylist);// 插入顺序排序,直接加入集合

System.out.println(linkedhashset);

// get,set

String a = arraylist.get(2);

System.out.println(a);

arraylist.set(1, "three");

System.out.println(arraylist);

// linkedlist.set(1, "A");

// remove,removeAll

arraylist.remove("three");// 删除第一个相同的元素

arraylist.remove(2);//如果元素也是2,位置优先

System.out.println(arraylist);

hashset.remove("two");

System.out.println(hashset);

// contains,containsAll

// 对于List来说ArrayList更利于查询和增删,LinkedList更利于增删,在之后的队列和栈中表现

// 对于Set来说常用HashSet无序不重复,所以不用遍历查询的效率是非常高的

// Iterator

Iterator it = arraylist.iterator();// 1

while (it.hasNext()) {

String str = it.next().toString();

System.out.println("-" + str);

if ("one".equals(str)) {

it.remove();// 迭代器中的删除方法

}

}

System.out.println(arraylist);// 2

for (String str : arraylist) {

System.out.println(str);

}

arraylist.forEach((str) -> System.out.println(str));// 3

// 队列和栈

Queue q = new LinkedList();// 先进先出

q.offer(1);

q.offer('A');

q.offer("B");

for (int i = 0; i < q.size(); i++) {

System.out.println(q.peek());// 查看

q.poll();// 删除

}

Deque d = new LinkedList();

d.offer(1);

d.offer(2);

d.push(3);// push

d.pop();// pop

d.offerFirst(0);// offerFirst

d.pollLast();

System.out.println(d);

// subList,asList,.toArray集合和数组的转换

arraylist.clear();

arraylist.add("one");

arraylist.add("two");

arraylist.addAll(ex);

arraylist.add(2, "three");

System.out.println(arraylist);

List sub = arraylist.subList(0, 2);

// System.out.println(sub);

// sub.clear();//

// System.out.println(arraylist);//删除的问题

Object[] strs = arraylist.toArray();

System.out.println(Arrays.toString(strs));

strs = Arrays.copyOf(strs, strs.length - 1);// 不存在删除的问题

System.out.println(Arrays.toString(strs));

System.out.println(arraylist);

String[] strs1 = { "A", "B", "C" };

List<String> list = Arrays.asList(strs1);

System.out.println(Arrays.toString(strs1));

list.set(1, "C");

System.out.println(Arrays.toString(strs1));// 这里转换成集合之后不能增删只能更改,且会改变

数组

// sort可以被Collections.sort的类型都是继承了Comparable接口

List<Sort1> sort1 = new ArrayList<Sort1>();// 1

sort1.add(new Sort1(3, 2));

sort1.add(new Sort1(1, 2));

sort1.add(new Sort1(2, 2));

Collections.sort(sort1);

System.out.println(sort1.toString());// OK

Collections.sort(sort1, new Comparator<Sort1>() {// 2

@Override

public int compare(Sort1 s1, Sort1 s2) {

// TODO Auto-generated method stub

return s2.x - s1.x;

}

});

System.out.println(sort1.toString());

// Map

/*

* 散列表的存储 根据key的哈希值来存储,本身是不重复的,equals的对象哈希值必定相等,哈希值相等未必

equals

* 根据哈希值找寻key根据key找寻values这样无序的存储,但是有相同的哈希值时以List存储在一个位置

* 本身具有容量16,我们可以设置它的容量和利用率,默认的利用率在3/4

* 

*/

Map<String, String> map = new HashMap<String, String>();

map.put("one", "haha");

map.put("two", "heihei");

map.put("three", "hehe");

System.out.println(map.get("one"));//

map.remove("one");

System.out.println(map);

Set<String> keys=map.keySet();

System.out.println(keys);

Collection<String> values=map.values();

System.out.println(values);

Set<Entry<String,String>> keyvalue=map.entrySet();

for(Entry<String,String> entry:keyvalue) {

System.out.println(entry.getKey()+","+entry.getValue());

}

//补充之BlockingQueue->ArrayBlockingQueue,LinkedBlockingQueue;

//两个最为特殊的方法put(),take()等待放入和取出

//offer(e,time,u),poll(time,u)多长的时间内将元素插入或拿出

BlockingQueue<String> bq=new ArrayBlockingQueue<>(5);//需要设置初始容量

try {

bq.offer("haha", 5, TimeUnit.MILLISECONDS);//offer

bq.poll(5,TimeUnit.MILLISECONDS);

bq.put("heihei");

bq.take();

} catch (InterruptedException e) {//这里说明是线程

// TODO Auto-generated catch block
e.printStackTrace();

}


}

}


class Sort1 implements Comparable<Sort1> {

int x;

int y;


public Sort1(int x, int y) {

this.x = x;

this.y = y;

}


@Override
public int compareTo(Sort1 s) {

// TODO Auto-generated method stub

return this.x - s.x;

}


public String toString() {

return "" + this.x;

}


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值