鸡和框架

集合框架

在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework)。

Collection接口

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。JavaSDK不提供直接继承自Collection的类,JavaSDK提供的类都是继承自Collection的“子接口”如List和Set。

Set和List:

Set子接口:无序,不允许重复。

List子接口:有序,可以有重复元素。

具体区别是

List:

和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。

<相应类有 ArrayList,LinkedList,Vector>
ArrayList类

ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。

public class Arraylist {
public static void main(String[] args) {
	List lst = new ArrayList();
	lst.add(121);// 增
	// lst.remove(1);//删
	lst.add("哈喽");
	lst.add("hello");
	lst.set(2, "opp");// 改
	System.out.println(lst.get(2));// 查
	// System.out.println(lst.isEmpty());
	// System.out.println(lst.size());
    }
}
LinkedList类

实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。

public class Linkedlist {
public static void main(String[] args) {
	LinkedList lkl = new LinkedList();
	lkl.add("MLW");
	lkl.add("TYZ");
	lkl.add(‘A‘);
	System.out.println(lkl);
	lkl.add(2, 250);// 插入
	System.out.println(lkl);
	lkl.addFirst("哈哈");// 插到开头
	lkl.addLast(4396);// 插到尾部
	System.out.println(lkl);
	System.out.println(lkl.contains("QGJ"));// 如果此列表包含指定元素,则返回 true。
	System.out.println(lkl.element());// 获取但不移除此列表的头(第一个元素)。
	System.out.println(lkl.get(2));// 返回此列表中指定位置处的元素。
	System.out.println(lkl.indexOf("TYZ"));//返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
	lkl.offer("MLW");//将指定元素添加到此列表的末尾(最后一个元素)。
	lkl.set(2, "么么哒");//将此列表中指定位置的元素替换为指定的元素。
	System.out.println(lkl);
}

}

Set:

检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)

Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

<对应类有 HashSet,TreeSet>
HashSet类

它不允许出现重复元素;不保证和政集合中元素的顺序,可以自己做个例子可以看出加入的字段顺序跟遍历出的不一样,允许包含值为null的元素,但最多只能有一个null元素

public class hashset {
public static void main(String[] args) {
	HashSet she = new HashSet();
	she.add("zhangsna");
	she.add("lisi");
	she.add("wangwu");
	she.add("lisi");
	Iterator it = she.iterator();
	while (it.hasNext()) {
		System.out.println(it.next());
    	}
    }
}
TreeSet类

可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,并保证该集合元素组成按照“升序”排列。

ByTheWay

a)(在对大量信息进行检索的时候,TreeSet比AraayList更有效率,能保证在log(n)的时间内完成)。
b)TreeSet是实用树形结构来存储信息的,每个节点都会保存一下指针对象,分别指向父节点,左分支,右分支,相比较而言,ArrayList就是一个含有元素的简单数组了,正因为如此,它占的内存也要比ArrayList多一些。
c)想TreeSet插入元素也比ArrayList要快一些,因为当元素插入到ArrayList的任意位置时,平均每次要移动一半的列表,需要O(n)的时间, 而TreeSet深度遍历查询花费的实施只需要O(log(n))

Map的功能方法

Map主要用于存储健值对,根据键得到值,因此不允许键重复,但允许值重复。

Hashmap

是一个 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。

public class hashmap {
public static void main(String[] args) {
	Map<String, String> map = new HashMap<String, String>();
	map.put("mlw", "孟良伟");
	map.put("tyz", "唐艺倬");
	map.put("qgj", "乔冠杰");
        //System.out.println(map.containsKey("mlw"));//如果此映射包含对于指定键的映射关系,则返回
        //System.out.println(map.size());// 返回此映射中的键-值映射关系数。
	// map.remove("mlw");//从此映射中移除指定键的映射关系(如果存在)。
	System.out.println(map);
	System.out.println(map.get("mlw"));
	Set set = map.keySet();//返回此映射中所包含的键的 Set 视图
	System.out.println(set);// 打印所有key
	Iterator<String> it = set.iterator();
	while (it.hasNext()) {
	System.out.println(map.get(it.next()));
	}
}

}

注意:

1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
2、Set和Collection拥有一模一样的接口。
3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)...。(add/get)
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。
5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。
6、HashMap会利用对象的hashCode来快速找到key。
7、哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。我们都知道所有存储结构中,array查找速度是最快的。所以,可以加速查找。 发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。
8、Map中元素,可以将key序列、value序列单独抽取出来。
9、使用keySet()抽取key序列,将map中的所有keys生成一个Set。
10、使用values()抽取value序列,将map中的所有values生成一个Collection。
11、为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。

时间: 2024-10-12 17:34:07

鸡和框架的相关文章

鸡啄米MFC教程笔记之二:MFC应用程序框架分析

这一节鸡啄米就为大家分析下MFC应用程序框架的运行流程. 一.SDK应用程序与MFC应用程序运行过程的对比 程序运行都要有入口函数,在之前的C++教程中都是main函数,而Windows应用程序的入口函数是WinMain函数,MFC程序也是从WinMain函数开始的.下面鸡啄米就给出用Windows SDK写的“HelloWorld”程序,与MFC应用程序框架进行对比,这样能更好的了解框架是怎样运行的.Windows SDK开发程序就是不使用MFC类库,直接用Windows API函数进行软件开

为什么要使用框架

使用框架的初衷 编程有一个准则Don't Repeat Yourself(不要重复你的代码).如果有一些代码出现重复,我们就应该把这些代码提取出来封装成一个方法.随着时间的积累有了一批方法,我们把它整合成工具类.工具类如果形成规模,可以把工具类整合成类库.类库更系统功能更全.不仅不要自己重复造项目中已有的轮子,也不要造别人已经造好的轮子.我们只需要直接使用已有的轮子就行. 框架也是一样,框架,是为了我们不必总是写相同代码而诞生的.框架,是为了让我们专注于业务逻辑而诞生的.框架,把我们程序设计中不

[每周翻译]作为一个计算鸡领域相关的学生狗,有毛东西可以让我花10分钟学习然后享受一生的?

原文地址:https://www.quora.com/As-a-computer-science-student-what-can-I-learn-right-now-in-just-10-minutes-that-could-be-useful-for-the-rest-of-my-life 问:作为一个计算鸡领域相关的学生狗,有毛东西可以让我花10分钟学习然后站撸不哭的?我知道这个问题和 What can I learn/know right now in 10 minutes that w

Android Bitmap 开源图片框架分析(精华三)

主要介绍这三个框架,都挺有名的,其他的框架估计也差不多了 Android-Universal-Image-Loaderhttps://github.com/nostra13/Android-Universal-Image-Loader ImageLoaderhttps://github.com/novoda/ImageLoader Volley(综合框架,包含图片部分)https://github.com/mcxiaoke/android-volley 扯淡时间,可以跳过这段这些开源框架的源码还

框架选型

前面的话 有一个流传较广的笑话,一个人在stackoverflow中提了一个问题,如何使用javascript实现一个数字与另外一个数字相加.最高票回答是你应该使用jQuery插件,jQuery插件可以做任何事情. 历史总是在重演,以前是jQuery,现在可能是react或vue.不同的框架有不同的应用场景,杀鸡不要用牛刀.本文将详细介绍框架选型 框架与库 库(lib)具有以下三个特点: 1.是针对特定问题的解答,具有专业性: 2.不控制应用的流程 3.被动的被调用 框架(frameword)具

Java中关于先有鸡还是先有蛋的问题----Class&amp;Object

在Java中,我们常常会看到一个类型:Class.并且在类似Person.class,cache.getClass()等代码中见到它的身影. 众所周知,Class是用来描述一个类的类型,而Object是所有对象的最终父对象.那么就会引申出下边的两个结论: 1.如果从对象的角度来看,那么肯定是先有Object对象,其次才有其派生的对象Class. 2.Class表示的是类.对象,肯定是先有类这个概念,其次才有各个类型(抽象的.非抽象的),包括Object. 这就会出现一个问题,到底是先有Class

Html菜鸡大杂烩

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>菜鸡大杂烩</title> </head> <body> <p>注册帐号</p> <hr/> <form> 邮箱帐号 <input type="text"/&g

YII框架的依赖注入容器

依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象. 所谓的依赖就是,一个对象,要使用另外一个对象才能完成某些功能.那么这个对象就依赖于被使用的对象. 例如: /** * 厨师 */ class cook { /** * 制作食物 */ public function cooking() { $food = new food(); echo $food->get(),"汤<br/>"; } } /*

EF实体框架创建方法

EF实体框架创建方法: 1.添加EF框架: 在工程中,先添加文件夹:DataModel(方便管理),在文件夹中再添加新项:数据--ADO.Net实体数据模型: 命名为: DataModel.edmx.并勾选“确定对象名称的单复数形式”(会创建集合和项的名称区别). 2.数据模型文件说明: DataModel.edmx:生成的数据模型文件包.DataModel.Context.cs:包括模型中,所有表集合的管理类.DataModel.tt子节点下的文件:表数据类的定义(映射). 3.问题: 1.生