~~~~我的生活,我的点点滴滴!!
List(列表):
List的特征是其元素以线性方式存储,集合中可以存放重复的对象,他是一个接口类,他的主要实现类包括ArrayList、LinkedList、Stack、Vector
我们说说常用三个:
1、ArrayList: 代表长度是可以改变的数组,可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢。他只适合随机查找、遍历,快速访问等。
2、Vector: 也是通过数组实现的,他和ArrayList基本一样的,唯一的区别是他支持线程的同步,即某一时刻只有一个线程能写Vector(自带加锁与解锁功能),
但是线程同步是需要代价的,因此他访问比ArrayList要慢。
3、LinkedList: 在实现中采用链表数据结构,插入和删除速度快,访问速度慢,另外他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,
可以当作堆栈、队列和双向队列使用。
注意:对于Vector与ArrayList,当发现数组的大小不够用的时候,需要重新建立数组,然后将元素拷贝到新的数组内,所以他们的代价还是蛮大的,默认他们的扩展空间如下:
a、ArrayList在内存不足时默认扩大50%+1个。
b、Vector默认扩大100%即1倍。
但是对于Stack,看源码就知道他不属于List的直接实现类,所以对于Stack可以直接使用 Stack stack = new Stack();
所以对于List的对象,我们的new的时候,要选择使用上面两种中的一种来生成相应的容器。
例如:
List<String> listItems = new ArrayList<String>();
对List的的随机访问来说,就是只随机来检索位于特定位置的元素,List的get(int index)方法获取集合中index参数的位置对象,下标是从0开始的,
最基本的两种检索集合中的所有对象的方法:
1、for+get方法
for(int i = 0; i < list.size(); ++ i)
{
System.out.println(list.get(i));
}
2、Iterator迭代器
Iterator it = list.iterator();
while( it.hashNext )
{
System.out.println(it.next);
}
ps:具体的函数接口及使用方法可以看源码或帮助文档。
Map(映射):
Map 是一种把健对象和值对象映射的集合,它的每一个元素都包括一对健对象和值对象,他是接口类,常用的实现类有HashMap、TreeMap、LinkedHashMap:
HashMap:基于散列表的实现,插入与查询的开销是常量级,操作很快。
LinkedHashMap: 类似于HashMap,他在迭代遍历时,取得键值对的顺序是他插入时的顺序,比HashMap要慢一点。
TreeMap:基于红黑树实现的,这个才是对应于C++ STL中的Map,TreeMap是默认根根据键值排序的,速度快。
简单的介绍就到此为止,因为我主要是想知道和C++ 中的一些区别与熟悉一下java中的容器,详细介绍和使用样例见下面的链接:
http://www.cnblogs.com/littlehann/p/3690187.html
相当全面。
SimpleAdapter
SimpleAdapter是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图。
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
参数说明:
context: SimpleAdapter关联的View的运行对象
data: 一个Map组成的List数据结构,在列表中的每个条目对应列表中的一行,每一个Map中应该包含所有在from参数中指定的键(Key)
resource: 一个定义列表项的布局文件的资源ID,布局文件将至少包含那些在to中定义的ID
from: 一个将被添加到Map映射上的键名(key)
to: 将绑定数据的视图的ID(map中的value),跟from对数对应,并且应该是view
在ListView中使用样例:
List< Map<String, Object> > listItems = new ArrayList< Map<String, Object> >();
for( int i = 0; i < files.length; ++ i )
{
Map<String, Object> itemMap = new HashMap<String, Object>();
if( files[i].isDirectory() )
{
itemMap.put("icon", R.drawable.folder);
}
else if( files[i].isFile() )
{
itemMap.put("icon", R.drawable.file);
}
itemMap.put("fileName", files[i].getName());
listItems.add(itemMap);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.line,
new String[]{"icon", "fileName"}, new int[]{R.id.icon, R.id.file_name});
listView.setAdapter(simpleAdapter);