java中列表的简单介绍与迭代器

Collection类中有多种容器类型:

  1. List 以特定的顺序保存元素
  2. Set 元素不能重复
  3. Queue 链表,只能从一端插入对象,从另一端取出 遵循先进先出原则
  4. Map 键值对插入

List中有两种类型的列表:

  • ArrayList:随机访问快,插入删除慢
  • LinkedList:插入删除快,但是随机访问慢。还添加了作为栈、队列、双端列表的方法,可以直接作为栈来使用,遵守“后进先出,先进后出”的原则,其中有几个常用方法:
    romove() romovefirst()返回列表头部并移除
    addfirst() add() addlast()插入到列表的尾部
    getfirst() element() peek()返回列表的头部

Set
Set具有与Collection完全一样的接口,因此没有额外的功能只是行为不同,不能保存重复的元素

  • HashSet 使用散列
  • TreeSet 将元素存储在红-黑树数据结构之中
  • LinkedHashSet 也使用了散列,但使用了链表来维护元素的插入顺序
    contains(元素)检查是否包含该元素
    三种列表都具有不同的元素存储方式

Map
采用键值对Key-Value的形式存储对象
- HashMap:是无序的,与放入的顺序无关
- LinkedHashMap:存入时会记录put的毫米数,遍历时按照存入的顺序输出

Map<K,V> map=new HashMap<K,V>();
map.put(k,v);
map.get(k)返回value

Map也可以扩展到多维

Map<K,List<?>> maps=new HashMap<K,List<?>>();

2在链表中添加元素的几个方法

1 Collections.addAll()接受多个参数,将之后的参数转化为数组存入第一个参数的序列中

2 在创建列表实例时,传入参数
可以使用Array.asList()将参数数组转化为列表list的形式,参数可以为数组或者逗号分割的元素列表

Collection<> collection=new ArrayList<>(Arrays.asList(1,2,3,4,5))//直接传入参数
Collections.addAll(collection,1,2,3,4,5,6)//参数转化为数组存入第一个参数的序列中
Collection.addAll(collection,moreInts)

3 foreach与迭代器Iterable

由于所有的Collection类型的对象都被强制要求implements Iterable 接口,故任何Collection对象都要能返回一个能遍历其的迭代器Iterator。

Collection<> collection=new ArrayList<>
Iterator<> it=collection.iterator()

迭代器的内部代码如下

Interface Iterator<E>{
boolean  hasNext() 
          Returns true if the iteration has more elements.

 E  next() 
          Returns the next element in the iteration.

void  remove() 
          Removes from the underlying collection the last element returned by the iterator (optional operation).
          }

iterator使用时通常都包含着这三个方法

Iteraotr it= arrayList.Iterator();
while(it.hasNext())
{
  print(it.next());
      it.remove();
}

foreach遍历,内部就使用了Iterable接口的iterater方法:

for(type var:coll()){body-of-loop; }
就等价于:
for(Iterator<type> iter=coll.iterator(); iter.hasNext();){
    type var=iter.next();
    body-of-loop;
}

所以所有实现了Iterable的类,都可以将他用于foreach语句中,比方说:

public class IterableClass implements Iterable<String>{
    protected String[] words=("And that is how "+
    "we know the earth to be banana-shaped.").split(" ")//以空格分割为数组的形式
    public Iterable<String> iterator(){
        return new Iterable<String>(){
            private int index=0;
            public boolean hasNext(){
                return index<words.length();
            }
            public String next(){
                return word[index++];
            }
            public remove(){}
        };
    }
    public static void main(String[] args){
        for(String s:new IterableClass())
            System.out.print(s+" ")
    }
}
Output: And that is how we know the earth to be banana-shaped.
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐