美文网首页
JAVA编程思想—容器基础(一)

JAVA编程思想—容器基础(一)

作者: Su阿伟 | 来源:发表于2020-01-07 22:37 被阅读0次

Java容器类类库的用途就是“保存对象”

1>:Collection一个独立元素的序列,这些元素都服从一条或多条规则。

List 必须按照插入的顺序保存元素

Set 不能有重复元素

Queue 按照排队规则来确定对象产生的顺序(一般与被插入元素一致)

2>:Map  一组成对的“键值对”对象,容许你使用键来查找值

ArrayList  允许你使用数字来查找值。

映射表允许我们使用另一个对象来查找某个对象。(关联数组、字典)

List<Apple>apples=newArraylist<Apple>();

List<Apple>apples=newLinkedList<Apple>();

注意,ArrayList  已经被向上转型为 List,目的就是如果你决定去修改你的实现,只需要在创建处修改。

如下用 Integer 对象填充一个 Collection

publicstaticvoidmain(String[]args) {

Collection<Integer>c=newArrayList<Integer>();

for(inti=0;i<10;i++){

c.add(i);//自动装箱

for(Integert:c)

System.out.println(t+" ,");

       }

   }

3>:添加一组元素

ArrayList.asList() 可以接受一个数组或是用一个逗号分隔的元素列表(使用可变参数),并将其转换为一个 List 对象。

Collection<Integer>collection=newArrayList<Integer>(Arrays.asList(1,2,3,4,5));

Integer[]moreInts={6,7,8,9,10};

collection.addAll(Arrays.asList(moreInts));

Collections.addAll(collection,11,12,13,14,15);

Collections.addAll(collection,moreInts);

List<Integer>list=Arrays.asList(16,17,18,19);

list.set(1,99);

4>:容器打印

importjava.util.*;

publicclassPrintContains{

staticCollectionfill(Collection<String>collection) {

collection.add("rat");

collection.add("cat");

collection.add("dog");

collection.add("dog");

returncollection;

   }

staticMapfill(Map<String,String>map) {

map.put("rat","Fuzzy");

map.put("cat","Rags");

map.put("dog","Bosco");

map.put("dog","Spot");

returnmap;

   }

publicstaticvoidmain(String[]args) {

System.out.println(fill(newArrayList<String>()));

System.out.println(fill(newLinkedList<String>()));

System.out.println(fill(newHashSet<String>()));

System.out.println(fill(newTreeSet<String>()));

System.out.println(fill(newLinkedHashSet<String>()));

System.out.println(fill(newHashMap<String,String>()));

System.out.println(fill(newTreeMap<String,String>()));

System.out.println(fill(newLinkedHashMap<String,String>()));

   }

}

输出为:

[rat, cat, dog, dog][rat, cat, dog, dog][rat, cat, dog][cat, dog, rat][rat, cat, dog]{rat=Fuzzy, cat=Rags, dog=Spot}{cat=Rags, dog=Spot, rat=Fuzzy}{rat=Fuzzy, cat=Rags, dog=Spot}

从输出可以看出,Collection 打印的会用 [ ] 包住,Map 则是会用 { }括起来。

ArrayList,它长于随机访问元素,但是插入和移除元素时较慢

LinkedList,通过较低代价的进行插入删除,提供了优化的顺序访问,在随机访问方面较慢,

getFirst()和element():返回列表的头(第一个元素),并不移除它,peek类似

removeFist()和remove():移除并返回第一个元素,poll类似

addFirst()、add()、addLast() :将元素插入到列表的尾部

removeLast():移除并返回列表的最后一个元素

5>:迭代器

迭代器是一个对象,工作是遍历并选择序列中的对象。

Java中的 Iterator 只能单向移动,只能用来:

一:使用方法 iterator() 要求容器返回一个 IteratorIterator 将准备好返回序列的第一个元素

二:使用 next() 获得序列中的下一个元素

三:使用 hashNext() 检查序列中是否还有元素

四:使用remove() 将迭代器中新近返回的元素删除

**ListIterator** : 是一个更加强大的Iterator的子类型,它只能用于各种List类的访问。虽然 Iterotor只能向前移动,但是 ListIterator 可以双向移动。它还可产生相当于迭代器在列表中指向的当前位置的前一个和后一个元素的索引,并且可以使用Set()方法替换它访问过的最后一元素。

6>: Stack

栈:后进先出容器

LinkedList 可以使用栈的所有功能。

publicclassStack<T>{

privateLinkedList<T>stroage=newLinkedList<>();

publicvoidpush(Tv) {

stroage.addFirst(v);

   }

publicTpeek() {

returnstroage.getFirst();

   }

publicTpop() {

returnstroage.removeFirst();

   }

publicbooleanempty() {

returnstroage.isEmpty();

   }

publicStringtoString() {

returnstroage.toString();

   }

}

这个类是在声明“我们在定义一个可以持有T类型对象的 StackStack 是用 LinkedList  实现的,而LinkedList  也被告知它将持有T 类型对象。”

7>:Set

set 不保存重复的元素

publicstaticvoidmain(Stringargts[]) {

Randomrandom=newRandom(47);

Set<Integer>intset=newHashSet<Integer>();

for(inti=0;i<10000;i++) {

intset.add(random.nextInt(30));

System.out.println(intset);

       }

1, 22, 23, 24, 25, 26, 27, 28, 29][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

会发现,每一个数只有哦一个实例在结果中。

8>:Map

publicstaticvoidmain(Stringargts[]) {

Randomrandom=newRandom(47);

Map<Integer,Integer>m=newHashMap<Integer,Integer>();

for(inti=0;i<10000;i++) {

intr=random.nextInt(20);

Integerfreq=m.get(r);

m.put(r,freq==null?1:freq+1);

       }

System.out.print(m);

   }

输出结果:

{0=481, 1=502, 2=489, 3=508, 4=481, 5=503, 6=519, 7=471, 8=468, 9=549, 10=513, 11=531, 12=521, 13=506, 14=477, 15=497, 16=533, 17=509, 18=478, 19=464}

相关文章

  • JAVA编程思想—容器基础(一)

    Java容器类类库的用途就是“保存对象” 1>:Collection一个独立元素的序列,这些元素都服从一条或多条规...

  • Java编程思想---容器

    Java编程思想---容器 填充容器 上面展示了两种用对单个对象的引用填充Collection的方式,一种是用Co...

  • Java架构师阅读书单

    一、内功心法 Java基础: 《Java核心技术》《Java编程思想》《Effective Java》 多线程...

  • Android开发学习路线

    基础 Java 基础 《Java编程思想》,如果完全没有基础,可以先尝试《Head First Java》,看《J...

  • 2020-09-26

    java编程思想· 生命周期 力扣基础

  • Java并发编程:并发容器

    Java并发编程:并发容器之CopyOnWriteArrayList(转载) Java并发编程:并发容器之Conc...

  • Reading List

    写于2019年5月14日 编程 Java 在读 基础 Java编程思想 Java核心技术 卷II 高级特性 数据结...

  • Java 技术栈

    1、Java基础 Leetcode 刷题、Java 编程思想、JVM 原理、设计模式、Java 8 新特性 2、项目经验

  • Java并发编程基础之并发包源码剖析(书籍目录)

    并发编程是Java编程的核心领域,而Java并发包则凝聚了并发编程的精华,掌握并发编程基础,熟练应用,理解思想则显...

  • 面向对象的三大特征

    一、有良好的Java面向对象思想,扎实的编程基础和编程规范。 1、封装 核心思想就是“隐藏细节”、“数据安全”:将...

网友评论

      本文标题:JAVA编程思想—容器基础(一)

      本文链接:https://www.haomeiwen.com/subject/biadactx.html