<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Os Javeiros</title>
	<atom:link href="http://javeiros.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://javeiros.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Sun, 29 Jun 2008 22:56:24 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='javeiros.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Os Javeiros</title>
		<link>http://javeiros.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://javeiros.wordpress.com/osd.xml" title="Os Javeiros" />
	<atom:link rel='hub' href='http://javeiros.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Copiar um Array para outro Array</title>
		<link>http://javeiros.wordpress.com/2008/06/29/copiar-um-array-para-outro-array/</link>
		<comments>http://javeiros.wordpress.com/2008/06/29/copiar-um-array-para-outro-array/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 22:56:24 +0000</pubDate>
		<dc:creator>javeiros</dc:creator>
				<category><![CDATA[Scripts - Java]]></category>

		<guid isPermaLink="false">http://javeiros.wordpress.com/?p=13</guid>
		<description><![CDATA[Abaixo irei colocar 3 modos de conseguir copiar um Array para outro&#8230; 1º modo: class CopiandoArrays1 { public static void main(String args[]){ String cor[] = {"vermelho", "azul", "preto", "branco", "rosa"}; String copiaCor[] = (String[]) cor.clone(); //metodo clone da classe Object for(int i = 0; i &#60; copiaCor.length; i++){ System.out.println(copiaCor[i]); } } } 2º modo: class [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=13&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Abaixo irei colocar 3 modos de conseguir copiar um Array para outro&#8230;</p>
<p>1º modo:</p>
<p><code>class CopiandoArrays1 {<br />
  public static void main(String args[]){<br />
    String cor[] = {"vermelho", "azul", "preto", "branco", "rosa"};<br />
	String copiaCor[] = (String[]) cor.clone(); //metodo clone da classe Object<br />
	  for(int i = 0; i &lt; copiaCor.length; i++){<br />
	    System.out.println(copiaCor[i]);<br />
	  }<br />
  }<br />
}</code></p>
<p>2º modo:</p>
<p><code>class CopiandoArrays2 {<br />
  public static void main(String args[]){<br />
    String cor[] = {"vermelho", "azul", "preto", "branco", "rosa"};<br />
	String copiaCor[] = new String[cor.length];<br />
	System.arraycopy(cor, 0, copiaCor, 0, cor.length); //Copiando usando o metodo System.arraycopy<br />
	for(int i = 0; i &lt; copiaCor.length; i++){<br />
	    System.out.println(copiaCor[i]);<br />
	  }<br />
  }<br />
}</code></p>
<p>3º modo:</p>
<p><code>import java.util.Arrays;<br />
class CopiandoArrays3 {<br />
  public static void main(String args[]){<br />
    String cor[] = {"vermelho", "azul", "preto", "branco", "rosa"};<br />
	String copiaCor[] = new String[cor.length];<br />
	for(int indice = 0; indice &lt; cor.length; indice++) {<br />
	  copiaCor[indice] = cor[indice];<br />
	  System.out.println(copiaCor[indice]);<br />
	}<br />
  }<br />
}</code></p>
<p>Creio que um dos 3 modos ira servir para voce.</p>
<p>Abraços</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/javeiros.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/javeiros.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javeiros.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javeiros.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javeiros.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javeiros.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javeiros.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javeiros.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javeiros.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javeiros.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javeiros.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javeiros.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javeiros.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javeiros.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javeiros.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javeiros.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=13&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javeiros.wordpress.com/2008/06/29/copiar-um-array-para-outro-array/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/026a8c5105cd401d1410ab601aa03a0b?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">javeiros</media:title>
		</media:content>
	</item>
		<item>
		<title>Burcar dados no Array</title>
		<link>http://javeiros.wordpress.com/2008/06/29/burcar-dados-no-array/</link>
		<comments>http://javeiros.wordpress.com/2008/06/29/burcar-dados-no-array/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 22:55:17 +0000</pubDate>
		<dc:creator>javeiros</dc:creator>
				<category><![CDATA[Scripts - Java]]></category>

		<guid isPermaLink="false">http://javeiros.wordpress.com/?p=12</guid>
		<description><![CDATA[import java.util.Arrays; class BuscarNoArray { public static void main (String args[]) { String cor[] = {"vermelho", "azul", "preto", "branco", "rosa"}; int indice1 = Arrays.binarySearch(cor, "preto"); int indice2 = Arrays.binarySearch(cor, "amarelo"); System.out.println(indice1); System.out.println(indice2); } } Primeiro importo a classe Arrays porque é atraves do metodo binarySearch que saberemos se determinada coisa(string, int, double) contem no array. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=12&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><code>import java.util.Arrays;<br />
class BuscarNoArray {<br />
  public static void main (String args[]) {<br />
    String cor[] = {"vermelho", "azul", "preto", "branco", "rosa"};<br />
	int indice1 = Arrays.binarySearch(cor, "preto");<br />
	int indice2 = Arrays.binarySearch(cor, "amarelo");<br />
	System.out.println(indice1);<br />
	System.out.println(indice2);<br />
  }<br />
}</code></p>
<p>Primeiro importo a classe Arrays porque é atraves do metodo binarySearch que saberemos se determinada coisa(string, int, double) contem no array. Caso conter, sera retornado o numero do indice que contem essa coisa, como no exemplo acima, que contem a string preto&#8230; sera retornado o indice 2. Caso nao conter, sera retornado -1. </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/javeiros.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/javeiros.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javeiros.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javeiros.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javeiros.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javeiros.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javeiros.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javeiros.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javeiros.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javeiros.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javeiros.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javeiros.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javeiros.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javeiros.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javeiros.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javeiros.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=12&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javeiros.wordpress.com/2008/06/29/burcar-dados-no-array/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/026a8c5105cd401d1410ab601aa03a0b?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">javeiros</media:title>
		</media:content>
	</item>
		<item>
		<title>Ordenar um Array</title>
		<link>http://javeiros.wordpress.com/2008/06/29/ordenar-um-array/</link>
		<comments>http://javeiros.wordpress.com/2008/06/29/ordenar-um-array/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 22:53:07 +0000</pubDate>
		<dc:creator>javeiros</dc:creator>
				<category><![CDATA[Scripts - Java]]></category>

		<guid isPermaLink="false">http://javeiros.wordpress.com/?p=14</guid>
		<description><![CDATA[Ola pessoal, aqui ensinarei como ordenar um Array. Case-sensitive import java.util.Arrays; class OrdenarArray1 { public static void main(String args[]){ String[] cor = {"preto", "Branco", "vermelho", "azul", "Rosa"}; Arrays.sort(cor); System.out.println(Arrays.toString(cor)); } } Resultado na tela é: [Branco, Rosa, azul, preto, vermelho] Case-insensitive import java.util.Arrays; class OrdenarArray2 { public static void main(String args[]){ String[] cor = {"preto", [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=14&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ola pessoal, aqui ensinarei como ordenar um Array.</p>
<p>Case-sensitive<br />
<code>import java.util.Arrays;<br />
class OrdenarArray1 {<br />
  public static void main(String args[]){<br />
    String[] cor = {"preto", "Branco", "vermelho", "azul", "Rosa"};<br />
	Arrays.sort(cor);<br />
	System.out.println(Arrays.toString(cor));<br />
  }<br />
}</code></p>
<p>Resultado na tela é: [Branco, Rosa, azul, preto, vermelho]</p>
<p>Case-insensitive<br />
<code>import java.util.Arrays;<br />
class OrdenarArray2 {<br />
  public static void main(String args[]){<br />
    String[] cor = {"preto", "Branco", "vermelho", "azul", "Rosa"};<br />
	Arrays.sort(cor, String.CASE_INSENSITIVE_ORDER);<br />
	System.out.println(Arrays.toString(cor));<br />
  }<br />
}</code></p>
<p>Resultado na tela é: [azul, Branco, preto, Rosa, vermelho]</p>
<p>Case sensitive &#8211; Reverse Order<br />
<code>import java.util.Arrays;<br />
import java.util.Collections;<br />
class OrdenarArray3 {<br />
  public static void main(String args[]){<br />
    String[] cor = {"preto", "Branco", "vermelho", "azul", "Rosa"};<br />
	Arrays.sort(cor, Collections.reverseOrder());<br />
	System.out.println(Arrays.toString(cor));<br />
  }<br />
}</code></p>
<p>Reparem o uso da classe Collections.</p>
<p>Resultado na tela é: [vermelho, preto, azul, Rosa, Branco]</p>
<p>Case insensitive &#8211; Reverse Order<br />
<code>import java.util.Arrays;<br />
import java.util.Collections;<br />
class OrdenarArray4 {<br />
  public static void main(String args[]){<br />
    String[] cor = {"preto", "Branco", "vermelho", "azul", "Rosa"};<br />
	Arrays.sort(cor, String.CASE_INSENSITIVE_ORDER);<br />
	Collections.reverse(Arrays.asList(cor));<br />
	System.out.println(Arrays.toString(cor));<br />
  }<br />
}</code></p>
<p>Resultado na tela é: [vermelho, Rosa, preto, Branco, azul]</p>
<p>Numeros Inteiros<br />
<code>import java.util.Arrays;<br />
class OrdenarArray5 {<br />
  public static void main(String args[]){<br />
    int[] cor = {5, 3, -15, 0, -33, 7, -3};<br />
	Arrays.sort(cor);<br />
	System.out.println(Arrays.toString(cor));<br />
  }<br />
}</code></p>
<p>Resultado na tela é: [-33, -15, -3, 0, 3, 5, 7]</p>
<p>Espero que isso sirva de ajuda para voces.</p>
<p>Abraços</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/javeiros.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/javeiros.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javeiros.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javeiros.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javeiros.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javeiros.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javeiros.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javeiros.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javeiros.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javeiros.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javeiros.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javeiros.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javeiros.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javeiros.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javeiros.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javeiros.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=14&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javeiros.wordpress.com/2008/06/29/ordenar-um-array/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/026a8c5105cd401d1410ab601aa03a0b?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">javeiros</media:title>
		</media:content>
	</item>
		<item>
		<title>Coleções em Java &#8211; List</title>
		<link>http://javeiros.wordpress.com/2008/06/28/colecoes-em-java-list/</link>
		<comments>http://javeiros.wordpress.com/2008/06/28/colecoes-em-java-list/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 10:38:34 +0000</pubDate>
		<dc:creator>javeiros</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://javeiros.wordpress.com/?p=15</guid>
		<description><![CDATA[Uma lista é uma coleção ordenada de elementos do mesmo tipo, conhecida por seqüência. Os elementos de uma lista podem ser acessados pela sua posição, isto é, seu índice. OBS.: o primeiro elemento de qualquer lista tem índice 0 (zero). As listas são derivadas da interface java.util.List, que por sua vez, estende a interface Collection. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=15&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Uma lista é uma coleção ordenada de elementos do mesmo tipo, conhecida por seqüência. Os elementos de uma lista podem ser acessados pela sua posição, isto é, seu índice.</p>
<p>OBS.: o primeiro elemento de qualquer lista tem índice 0 (zero).</p>
<p>As listas são derivadas da interface java.util.List, que por sua vez, estende a interface Collection.</p>
<p>As listas podem receber elementos iguais, ou seja, dois objetos x1 e x2, onde x1.equals(x2) retorna verdadeiro, além de múltiplos null.</p>
<p>A interface List possui um iterator especial, o ListIterator, que permite o início da iteração em qualquer ponto da lista.</p>
<p>List possui os seguintes novos métodos (além dos que “vieram” de Collection):</p>
<p>    * void add(int i, E elemento) » adiciona um elemento do tipo E à lista, na posição i;<br />
    * boolean addAll(int i, Collection c) » adiciona todos os elementos de uma coleção c à lista, na posição i;<br />
    * E get(int i) » retorna o elemento do tipo E, que está na posição i; int indexOf(Object o) » retorna a posição do primeiro objeto o da lista &#8211; se ele não existir, retorna -1;<br />
    * Iterator iterator() » retorna um iterator, que será usado para percorrer todos os elementos da lista;  int lastIndexOf(Object o) » retorna a posição do último objeto o da lista &#8211; se ele não existir, retorna -1;</p>
<p>    * ListIterator listIterator() » retorna um iterator específico para listas, que será usado para percorrer todos os elementos da mesma;<br />
    * ListIterator listIterator(int i) » retorna um iterator específico para listas, que será usado para percorrer todos os elementos da mesma, a partir da posição i;<br />
    * boolean remove(int i) » remove o elemento que está na posição i da coleção;</p>
<p>    * E set(int i, E elemento) » substitui o elemento que está na posição i pelo emento que foi passado como argumento &#8211; o elemento antigo é retornado pelo método;<br />
    * List subList(int inicio, int fim) » retorna uma lista com todos os elementos da lista original, compreendidos entre inicio (inclusive) e fim (exclusive);</p>
<p>OBS.: Collection c quer dizer: objeto c, do tipo Collection, que contém elementos do mesmo tipo da coleção que está executando o método.</p>
<p>Retirado de: http://www.50minutos.com.br/?p=60</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/javeiros.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/javeiros.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javeiros.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javeiros.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javeiros.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javeiros.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javeiros.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javeiros.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javeiros.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javeiros.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javeiros.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javeiros.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javeiros.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javeiros.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javeiros.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javeiros.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=15&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javeiros.wordpress.com/2008/06/28/colecoes-em-java-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/026a8c5105cd401d1410ab601aa03a0b?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">javeiros</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial Java &#8211; Arrays e Coleções</title>
		<link>http://javeiros.wordpress.com/2008/06/28/tutorial-java-arrays-e-colecoes/</link>
		<comments>http://javeiros.wordpress.com/2008/06/28/tutorial-java-arrays-e-colecoes/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 10:05:18 +0000</pubDate>
		<dc:creator>javeiros</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://javeiros.wordpress.com/?p=10</guid>
		<description><![CDATA[Introdução O array é um grupo de posições contínuas na memória que possuem o mesmo nome e o mesmo tipo. Para referir-se a uma localização ou elemento particular no array, especificamos o nome do array e o número da posição(ou índice ou subscrito) do elemento particular no array. 1. Array Um array em Java é [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=10&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Introdução</p>
<p>    O array é um grupo de posições contínuas na memória que possuem o mesmo nome e o mesmo tipo. Para referir-se a uma localização ou elemento particular no array, especificamos o nome do array e o número da posição(ou índice ou subscrito) do elemento particular no array.</p>
<p>1. Array</p>
<p>    Um array em Java é tratado como um objeto, afinal ele advém da classe Array, e como todo objeto, é preciso:</p>
<p>    1)Declará-lo. Exemplo: int[] meuArray;<br />
    2)Construí-lo. Exemplo: meuArray = new int[2];<br />
    3)Inicializar. Exemplo: meuArray[0] = 2; meuArray[1] = 4.</p>
<p>    Neste caso foi criado um array com uma dimensão e duas posições do tipo inteiro, note os colchetes (“[]”). Cada conjunto indica uma dimensão. Como ilustração, podemos imaginar como exemplo, uma gaveta contendo várias pastas onde a posição de cada  pasta seria uma posição do array. A posição zero seria o primeiro elemento, posição 1 o segundo elemento e assim por diante até o último elemento(n -1). </p>
<p>    Vamos supor que desejamos construir um array de números inteiros. Então devemos realizar uma declaração do mesmo, como segue:</p>
<p>        int[] meuArray;</p>
<p>    O próximo passo é construir. Para isto, vamos definir que o array terá dez posições:<br />
        meuArray = new int[10];</p>
<p>    Vamos iniciar as cinco primeiras posições do array com valores:</p>
<p>         meuArray[0] = 22;<br />
         meuArray[1] = 2;<br />
         meuArray[2] = 242;<br />
         meuArray[3] = 4552;<br />
         meuArray[4] = 36.</p>
<p>    Agora, vamos construir um laço de repetição for para percorrer os elementos e produzir uma saída no terminal:</p>
<p>        for (int i = 0; i &lt; meuArray.length; i++){<br />
            System.out.println(&#8220;posição &#8221; + i + &#8221; = &#8221; + meuArray[i]);<br />
        ]</p>
<p>    O código completo fica desta maneira:</p>
<p>	public class MeuArray {</p>
<p> 	public static void main( String args[]){<br />
 int[] meuArray;<br />
 meuArray = new int[10];<br />
 meuArray[0] = 22;<br />
 meuArray[1] = 2;<br />
 meuArray[2] = 242;<br />
 meuArray[3] = 4552;<br />
 meuArray[4] = 36; </p>
<p> for (int i = 0; i &lt; meuArray.length; i++){<br />
 System.out.println(&#8220;posição &#8221; + i + &#8221; = &#8221; + meuArray[i]);<br />
 }</p>
<p> }</p>
<p>	}</p>
<p>    O programa ao ser executado vai produzir uma saída no terminal:</p>
<p>    posição 0 = 22<br />
    posição 1 = 2<br />
    posição 2 = 242<br />
    posição 3 = 4552<br />
    posição 4 = 36<br />
    posição 5 = 0<br />
    posição 6 = 0<br />
    posição 7 = 0<br />
    posição 8 = 0<br />
    posição 9 = 0</p>
<p>    Note que um dos parâmetros dentro da estrutura de repetição for é o método que obtém o tamanho do array, “length”.<br />
    Este método aplicado ao objeto meuArray(meuArray.length), retorna um número inteiro correspondente ao tamanho do array.<br />
    Existe uma classe que auxilia a utilização de array, que está localizada no pacote  java.util, tem o nome de Arrays, e possui os seguintes métodos:</p>
<p>    * binarySearch – permite uma pesquisa nos elementos de um determinado array ordenado, retornando um atributo inteiro com a posição deste elemento;<br />
    * equal – permite a comparação entre dois arrays, retornando um booleao verdadeiro(true), caso os array sejam iguais;<br />
    * fill – realiza o preenchimento de todos os elementos de um determinado array;<br />
    * sort – faz uma ordenação nos elementos de um determinado array;<br />
    * toString – mostra os elementos de um determinado array.</p>
<p>    Uma outra forma de inicializar um array, seria declarar o array já inicializando-o  com valores:</p>
<p>            int[] meuArray = {22,2,242,4552,36};</p>
<p>    Suponha agora que desejamos descobrir no objeto meuArray a posição que contem o elemento 4552. O método binarySearch  da classe Arrays é o mais indicado para isto, porém, no array meuArray não está ordenado, sendo uma condição para utilização do método binarySearch . O primeiro passo então seria ordenar o meuArray utilizando o método sort:</p>
<p>    java.util.Arrays.sort(meuArray);</p>
<p>    Agora podemos utilizar o método  binarySearch desta maneira:</p>
<p>    java.util.Arrays.binarySearch(meuArray,4552);</p>
<p>    Alterando o código exemplo temos:</p>
<p>	public class MeuArray {</p>
<p> 	public static void main( String args[]){<br />
  int[] meuArray;<br />
 meuArray = new int[10];<br />
 meuArray[0] = 22;<br />
 meuArray[1] = 2;<br />
 meuArray[2] = 242;<br />
 meuArray[3] = 4552;<br />
 meuArray[4] = 36; </p>
<p> java.util.Arrays.sort(meuArray);</p>
<p> 	for (int i = 0; i &lt; meuArray.length; i++){<br />
 System.out.println(&#8220;posição &#8221; + i + &#8221; = &#8221; + meuArray[i]);<br />
 }</p>
<p> System.out.println(&#8220;posição do elemento 4552 :&#8221; + java.util.Arrays.binarySearch(meuArray,4552));</p>
<p> }</p>
<p>	}</p>
<p>    Vamos agora construir um objeto array idêntico ao meuArray da seguinte forma:</p>
<p>        int [] espelho =  meuArray;</p>
<p>    O método equals da classe Arrays, permite comparar dois arrays retornando “true” ou “false”, como mostra o código a seguir::</p>
<p>    if (java.util.Arrays.equals(meuArray,espelho)){<br />
            System.out.println(&#8220;são identicos&#8230;&#8221;);<br />
    }else{<br />
            System.out.println(&#8220;são diferentes&#8230;&#8221;);<br />
    }</p>
<p>    O método fill da classe Arrays, preenche todos os elementos de um array com um dado valor, da seguinte forma:</p>
<p>        java.util.Arrays.fill(espelho,5522);</p>
<p>    Percorrendo todos os elementos deste array verificamos que os valores são os mesmos para todas as posições do array espelho:</p>
<p>        posição 0 = 5522<br />
        posição 1 = 5522<br />
        posição 2 = 5522<br />
        posição 3 = 5522<br />
        posição 4 = 5522<br />
        posição 5 = 5522<br />
        posição 6 = 5522<br />
        posição 7 = 5522<br />
        posição 8 = 5522<br />
        posição 9 = 5522</p>
<p>    Para finalizar, o método toString() da classe Arrays permite exibir todos elementos de um objeto array, como mostra o código a seguir:<br />
    System.out.println(&#8220;Conteúdo do objeto array : &#8221; + java.util.Arrays.toString(meuArray));</p>
<p>	public class MeuArray {</p>
<p> 	public static void main( String args[]){<br />
  int[] meuArray;<br />
 meuArray = new int[10];<br />
 meuArray[0] = 22;<br />
 meuArray[1] = 2;<br />
 meuArray[2] = 242;<br />
 meuArray[3] = 4552;<br />
 meuArray[4] = 36; </p>
<p> java.util.Arrays.sort(meuArray);</p>
<p> 	for (int i = 0; i &lt; meuArray.length; i++){<br />
 System.out.println(&#8220;posiÃ§Ã£o &#8221; + i + &#8221; = &#8221; + meuArray[i]);<br />
 }</p>
<p> System.out.println(&#8220;Conteúdo do objeto array : &#8221; + java.util.Arrays.toString(meuArray));</p>
<p> System.out.println(&#8220;posição do elemento 4552 :&#8221; + java.util.Arrays.binarySearch(meuArray,4552));</p>
<p>  int [] espelho = meuArray;</p>
<p> 	if (java.util.Arrays.equals(meuArray,espelho)){<br />
 System.out.println(&#8220;são identicos&#8230;&#8221;);<br />
 	else{<br />
 System.out.println(&#8220;são diferentes&#8230;&#8221;);<br />
 } </p>
<p> java.util.Arrays.fill(espelho,5522);</p>
<p> 	for (int j = 0; j &lt; meuArray.length; j++){<br />
 System.out.println(&#8220;posição &#8221; + j + &#8221; = &#8221; + meuArray[j]);<br />
 } </p>
<p> System.out.println(&#8220;Conteúdo do objeto array : &#8221; + java.util.Arrays.toString(meuArray));</p>
<p> }</p>
<p>	}</p>
<p>    A saída produzida no terminal é a que segue:</p>
<p>    Conteúdo do objeto array : [0, 0, 0, 0, 0, 2, 22, 36, 242, 4552]</p>
<p>    Para entender com é u arrray com mais de uma dimensão, pense que uma dimensão de um array seria como uma gaveta com pastas, e duas dimensões seria um armário completo. Assim, para localizarmos uma pasta é necessário localizar primeiro qual gaveta, para depois localizar a pasta dentro desta gaveta.<br />
    Observe o código a seguir:</p>
<p>	public class Armario {</p>
<p> 	/** Inicia programa Armario */<br />
 public static void main (String args[]){</p>
<p> String [][] dado = new String[3][3];</p>
<p> 	for (int gaveta = 0 ; gaveta &lt; dado.length; gaveta++){<br />
 	for(int pasta = 0; pasta &lt; dado[gaveta].length; pasta++){<br />
 dado[gaveta][pasta] = &#8220;Gaveta &#8221; + gaveta + &#8221; pasta &#8221; + pasta;<br />
 }<br />
 }</p>
<p> 	for (int gaveta = 0 ; gaveta &lt; dado.length; gaveta++){<br />
 	for(int pasta = 0; pasta = 1){<br />
 	for (int i = incr; i = incr &amp;&amp; temp &lt; meuarray[j - incr]){<br />
 meuarray[j] = meuarray[j - incr];<br />
 j -= incr;<br />
 }<br />
 meuarray[j] = temp;<br />
 }<br />
 incr /= 2;<br />
 }<br />
 }</p>
<p> public static void printarray(int[] a){<br />
 String var = &#8220;&#8221;;<br />
 	for (int i = 0; i &lt; a.length; i++){<br />
 var = var.concat(a[i] + &#8220;\n\r&#8221;);</p>
<p> }</p>
<p> JOptionPane.showMessageDialog( null, var, &#8220;Array ordenado&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 }</p>
<p> public static void main(String[] args){<br />
 // constroi um array com dez inteiro<br />
 int[] meuarray = new int[10];</p>
<p>  int i;</p>
<p> 	// preenche o array com valores randomicos<br />
 	for (i = 0; i &lt; meuarray.length; i++)<br />
 meuarray[i] = (int)(Math.random() * 100);<br />
 printarray(meuarray);<br />
 ordena(meuarray);<br />
 printarray(meuarray);<br />
 }<br />
	}</p>
<p><img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/array_ordenado1.jpg" alt="" /><img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/array_ordenado2.jpg" alt="" /></p>
<p>2. Vetores</p>
<p>    Em muitas linguagens de programação – em particular C – é necessário fixar o tamanho de todos os arrays em tempo de compilação. Os programadores odeiam isto porque os força a fazerem suposições e assumirem compromissos desconfortáveis.<br />
    Em Java, a situação é muito melhor. Pode-se definir o tamanho de um array em tempo de execução.</p>
<p>    int n;<br />
    &#8230;<br />
    Item[] itensPedidos = new Item[n+1];</p>
<p>    É claro, esse código não resolve totalmente o problema de modificar dinamicamente arrays em tempo de execução. Uma vez definido o tamanho do array, não se pode alterá-lo facilmente. Em vez disso, a maneira mais fácil de lidar com essa situação comum em Java é usar outro objeto Java que funcione como um array e que cresça ou diminua automaticamente. Esse objeto é chamado de vetor(vector). Assim, em Java, os vetores são objetos parecidos com arrays que podem crescer ou diminuir automaticamente sem que seja necessário escrever nenhum código para isso.</p>
<p>    Há uma diferença importante entre vetor e um array. Os arrays são um recurso da linguagem Java e há um tipo de array T[] para cada elemento do tipo T. Contudo, a classe Vector é uma classe de biblioteca, definida no pacote java.util, e há “um único tamanho de vetor que atende a todos” contendo elementos do tipo Object. Em particular, será necessário uma conversão de tipo sempre que se quiser obter um itm de um vetor.<br />
    Cria-se um novo vetor especificando sua capacidade inicial no construtor Vector.</p>
<p>    Vector itensOrdenados = new Vector(3);<br />
    // começa com espaço para um item pedido,<br />
    // mais dois itens para encargos de remessa a taxas</p>
<p>    Há um importante distinção entre a capacidade de um vetor e o tomanho de um array. Se você reservar um array com três itens, então o array terá três entradas prontas para serem usadas. Um vetor com uma capacidade de três elementos tem potencial de conter três elementos (e, na verdade, mais de três), mas no início, mesmo depois de sua construção inicial, um vetor não contém elemento nenhum.<br />
    Use o método add para adicionar novos elementos a um vetor. Por exemplo, suponhamos que você tenha uma classe chamada Item e use código a seguir para criar três objetos Item.</p>
<p>    Item proxItem = new Item(&#8230;);<br />
    Item ICMS = new Item(&#8230;);<br />
    Item remessa = new Item(&#8230;);</p>
<p>    Depois, use o código a seguir para adicionar esses itens a um vetor chamado itensOrdenados(que começa com uma capacidade de três objetos, conforme indicado no código).</p>
<p>    itensOrdenados.add(proxItem);<br />
    itensOrdenados.add(ICMS);<br />
    itensOrdenados.add(remessa);</p>
<p>    Suponhamos que você criou o vetor de modo que tenha uma capacidade original de três itens. Se você inserir outro item, então  terá execido a capacidade do vetor do nosso exemplo. É aqui que os vetores fazem sua mágica: o vetor se redimensiona e realoca memória automáticamente. O vetor encontra uma área maior de memória e copia automaticamente todos os objetos que ele contém atualmente para esse local.<br />
    Quanto espaço é alocado? A priori, o espaço alocado dobra cada vez que o vetor é redimendionado. Devido ao problema de crescimento exponencial em potencial, talvez não se queira contar com esse processedimento para realocar a grande quantidade de memória usada em vetores grandes. Em vez disso, pode-se especificar um incremento de capacidade como segundo argumento do construtor ao ser criado o vetor. Por exemplo:</p>
<p>    Vetor itensOrdenados = new Vector (3,10);   </p>
<p>    Agora o vetor vai crescer com incremento de 10 em cada realocação.<br />
    Por outro lado, se um programa Java tiver de realocar o espaço de um vetor frequentemente, isso vai reduzir o desempenho do programa, de modo que é importante fazer uma estimativa razoável da capacidade inicial e do incremento da capacidade – em que 10 pode ser um incremento muito pequeno.</p>
<p>    Vector()<br />
    Constrói um vetor vázio (com capacidade inicial 10 e incremento de capacidade igual ao dobro sempre qua a capacidade atual é excedida).</p>
<p>    Vector(int capacidadeInicial)<br />
    Constrói um vetor vazio com a capacidade especificada.</p>
<p>    Vector(int capacidadeInicial, int incrementoCapacidade)<br />
    Constrói um vetor vázio com capacidade especificada e o incremento especificado)</p>
<p>    boolean add(Object)<br />
    Adiciona um elemento ao final do vetor de modo que se torne o último elemento do vetor. Sempre retorna true (verdadeiro).</p>
<p>    void set size(int i)<br />
    Especifica o tamanho do vetor em n elementos exatamente. Se n for maior que o tamanho atual, serão adicionados elementos nulos ao final do vetor. Se n for menos que o tamanho atual, todos os elementos de índice n em diante serão removidos.</p>
<p>    void set (int indice, Object obj)<br />
    Coloca um valor no vetor em um índice especificado, sobrescrevendo o conteúdo anterior.</p>
<p>    Object get (int indice)<br />
    Obtém o valor armazenado em um índice especificado.</p>
<p>    add (int indice, Object obj)<br />
    Desloca para cima os elementos para poder inserir um outro elemento.</p>
<p>3. Coleções</p>
<p>    Estruturas de dados são mecanismos para manipular coleções de elementos em um programa. O pacote  java.util oferece algumas classes pré-definidas na API padrão de Java que implementam funcionalidades associadas a estruturas de dados.<br />
    As classes de coleções da API Java compõem o chamado framework de coleções, que foi completamente redefinido a partir da versão 1.2 de Java. As classes até então existentes, as classes de coleção históricas, foram reprojetadas para se adequar ao novo framework e são mantidas por motivos de compatibilidade, embora a recomendação seja utilizar as novas classes de coleções.<br />
    O framework de coleções foi introduzido a partir da plataforma Java 2, oferecendo um novo modelo de classes e interfaces para a manipulação de estruturas de dados. O modelo histórico não foi descontinuado, havendo ocorrido algumas adaptações quando necessário para adequar suas classes ao novo framework.<br />
    O framework tem por raiz duas interfaces básicas: Collection, usada para a manipulação de coleções onde os elementos são objetos individuais, e Map, usada para a manipulação de estruturas de pares de objetos, sendo um deles usado como a chave de acesso.<br />
    Um objeto  Collection  representa um agrupamento genérico de objetos simples. Objetos que implementam esta interface devem manter uma estrutura interna que permita acrescentar objetos à coleção, removê-los e consultar se um objeto é ou não parte da coleção.<br />
    Entre os métodos básicos especificados nesta interface estão:</p>
<p>    *     add() para adicionar o elemento especificado à coleção.<br />
    *     remove() para remover o elemento especificado da coleção.<br />
    *     contains() para verificar se a coleção contém o elemento especificado.<br />
    *     size() para obter a quantidade de elementos na coleção.</p>
<p>    Para percorrer os elementos de uma coleção, um objeto Iterator é utilizado. O método iterator() é usado para obter esse objeto que permite varrer todos os elementos da coleção.<br />
    A interface  Iterator associa, a cada coleção, um mecanismo para percorrer seu conteúdo independentemente da sua estrutura interna. Um objeto desta classe oferece os métodos:</p>
<p>    *      hasNext() para indicar se há mais elementos na coleção;<br />
    *      next() para obter o próximo elemento da coleção; e<br />
    *      remove() para retirar um elemento da coleção.</p>
<p>    A interface  ListIterator � uma extensão de Iterator que permite a varredura da coleção nas duas direções, especificando adicionalmente os métodos hasPrevious() e previous().<br />
    Duas outras interfaces são derivadas de Collection, Set e List. São especificações que de alguma forma restrigem ou complementam as funcionalidades básicas especificadas em Collection.</p>
<p>    A interface Set é uma extensão de Collection que não acrescenta nenhum método à especificação básica. No entanto, o comportamento dessa coleção é diferenciado, pois um objeto Set não armazena duas referências para um mesmo objeto &#8212; apenas uma cópia é admitida.</p>
<p>    A interface SortedSet é uma extensão de Set que agrega o conceito de ordenação ao conjunto. Para tanto, os elementos de um SortedSet devem ser comparáveis.</p>
<p>    Novos métodos que fazem uso dessa propriedade foram introduzidos, tais como:</p>
<p>    *     first() para obter o primeiro elemento do conjunto.<br />
    *     last() para obter o último elemento do conjunto.<br />
    *     subSet() para obter o subconjunto com todos os elementos contidos entre dois elementos especificados.</p>
<p>    A interface List  é uma extensão de Collection que acrescenta ao agrupamento o conceito de indexação, ou seja, informação sobre a posição do elemento em relação aos demais membros do grupo.</p>
<p>    Além dos métodos básicos de coleções, um objeto List tem métodos tais como:</p>
<p>    *    get() para obter o elemento armazenado na posição especificada;<br />
    *    indexOf() para obter a posição da primeira ocorrência do elemento especificado; e<br />
    *    subList() para obter uma sublista contendo os elementos compreendidos entre dois elementos especificados, incluindo o primeiro deles mas não o segundo.</p>
<p>    A interface  Map especifica as funcionalidades necessárias para manipular um grupo de objetos onde cada elemento é um par que associa um objeto chave a um objeto valor.<br />
Entre outros, os seguintes métodos são oferecidos:</p>
<p>    *     put(), que associa um novo objeto valor ao objeto chave especificado;<br />
    *     get(), que retorna o objeto valor associado ao objeto chave especificado;<br />
    *     containsKey(), que indica se a chave especificada está presente na coleção;<br />
    *     size(), que retorna a quantidade de elementos (pares chave-valor) na coleção.</p>
<p>    Se adicionalmente deseja-se que esse grupo de pares de objetos seja mantido por ordem dos valores das chaves, a interface mais especializada  SortedMap pode ser utilizada, desde que os objetos usados como chave sejam comparáveis.</p>
<p>     Além das funcionalidades acima, esta interface acrescenta a especificação de métodos tais como:</p>
<p>    *     firstKey() para retornar o elemento da coleção com a chave de menor valor.<br />
    *     lastKey() para retornar o elemento da coleção com a chave de maior valor.<br />
    *     subMap() para obter o subconjunto dos elementos compreendidos entre as chaves especificadas.</p>
<p>    A API de Java oferece algumas implementações para essas interfaces, tais como HashMap e TreeMap</p>
<p><img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/Collection.jpg" alt="" /></p>
<p>4. Exemplo ArrayList</p>
<p> // Pacotes Java<br />
 import java.awt.Color;<br />
 import java.util.*;<br />
 import javax.swing.JOptionPane;</p>
<p> public class TesteColecao {<br />
 private String colors[] = { &#8220;vervelha&#8221;, &#8220;branca&#8221;, &#8220;azul&#8221; };</p>
<p> // cria um ArrayList, adiciona objetos e manipula<br />
 public TesteColecao()<br />
 {<br />
 ArrayList list = new ArrayList();<br />
 String var = &#8220;&#8221;;</p>
<p> // Adiciona um objeto para lista<br />
 list.add( Color.magenta ); // Adiciona um objeto color</p>
<p> for ( int count = 0; count &lt; colors.length; count++ )<br />
 list.add( colors[ count ] ); </p>
<p> list.add( Color.cyan ); // Adiciona um objeto color</p>
<p> // saída do conteúdo da lista<br />
 var = &#8220;ArrayList: \n\r&#8221;;</p>
<p> for ( int count = 0; count &lt; list.size(); count++ )<br />
 var += list.get( count ) + &#8220;\n\r &#8220;;</p>
<p> JOptionPane.showMessageDialog( null, var, &#8220;ArrayList&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 // remove todos os objetos String<br />
 removeStrings( list );</p>
<p> // saída do conteúdo da lista<br />
 var = &#8220;ArrayList depos da chamada remove Strings: \n\r&#8221;;</p>
<p> for ( int count = 0; count &lt; list.size(); count++ ){<br />
 var += list.get( count ) + &#8220;\n\r &#8220;;</p>
<p> }<br />
 JOptionPane.showMessageDialog( null, var, &#8220;ArrayList&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 }</p>
<p> // remove objetos String objects da Coleção<br />
 public void removeStrings( Collection collection )<br />
 {<br />
 // recebe iterator<br />
 Iterator iterator = collection.iterator(); </p>
<p> // laço de repetição while na coleção verifica item<br />
 while ( iterator.hasNext() ) </p>
<p> if ( iterator.next() instanceof String )<br />
 iterator.remove(); // remove objeto String<br />
 }</p>
<p> // executa aplicação<br />
 public static void main( String args[] )<br />
 {<br />
 new TesteColecao();<br />
 } </p>
<p> } // fim da classe TesteColecao</p>
<p><img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteColecao_01.jpg" alt="" /><br />
<img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteColecao_02.jpg" alt="" /></p>
<p>5. Exemplo LinkedList</p>
<p> import java.util.*;<br />
 import javax.swing.JOptionPane;</p>
<p> public class TesteList {<br />
 private String colors[] = { &#8220;preta&#8221;, &#8220;amarela&#8221;, &#8220;verde&#8221;,<br />
 &#8220;azul&#8221;, &#8220;violeta&#8221;, &#8220;prata&#8221; };<br />
 private String colors2[] = { &#8220;ouro&#8221;, &#8220;branca&#8221;, &#8220;marrom&#8221;,<br />
 &#8220;azul&#8221;, &#8220;cinza&#8221;, &#8220;prata&#8221; };</p>
<p> // atribuir e manipular objetos LinkedList<br />
 public TesteList()<br />
 {<br />
 LinkedList link = new LinkedList();<br />
 LinkedList link2 = new LinkedList();</p>
<p> // adiciona elementos para cada lista<br />
 for ( int count = 0; count &lt; colors.length; count++ ) {<br />
 link.add( colors[ count ] );<br />
 link2.add( colors2[ count ] );<br />
 }</p>
<p> link.addAll( link2 ); // concatena lista<br />
 link2 = null; // release resources</p>
<p> imprimeLista( link );</p>
<p> uppercaseStrings( link );</p>
<p> imprimeLista( link );</p>
<p> JOptionPane.showMessageDialog( null, &#8220;Deletando elementos de 4 a 6&#8230;&#8221;, &#8220;Lista&#8221;, JOptionPane.INFORMATION_MESSAGE );</p>
<p> removeItems( link, 4, 7 );</p>
<p> imprimeLista( link );<br />
 }</p>
<p> // saida conteudo List<br />
 public void imprimeLista( List list )<br />
 {</p>
<p> String var = &#8220;&#8221;;<br />
 var = &#8220;lista: \n\r&#8221; ;</p>
<p> for ( int count = 0; count &lt; list.size(); count++ ){<br />
 var += list.get( count ) + &#8220;\n\r&#8221;;<br />
 }</p>
<p> JOptionPane.showMessageDialog( null, var, &#8220;Lista&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 } </p>
<p> // objeto String local e converte para uppercase<br />
 public void uppercaseStrings( List list )<br />
 {<br />
 ListIterator iterator = list.listIterator();</p>
<p> while ( iterator.hasNext() ) {<br />
 Object object = iterator.next(); // get item</p>
<p> if ( object instanceof String ) // check for String<br />
 iterator.set(<br />
 ( ( String ) object ).toUpperCase() );<br />
 }<br />
 }</p>
<p> // obtem sublista e usa metodo clear para deletar od itens<br />
 public void removeItems( List list, int start, int end )<br />
 {<br />
 list.subList( start, end ).clear(); // remove items<br />
 }</p>
<p> // executa aplicação<br />
 public static void main( String args[] )<br />
 {<br />
 new TesteList();<br />
 } </p>
<p> } // fim da classe TesteList]</p>
<p><img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteList_01.jpg" alt="" /><br />
<img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteList_02.jpg" alt="" /><br />
<img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteList_03.jpg" alt="" /><br />
<img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteList_04.jpg" alt="" /></p>
<p>6. Exemplo HashSet</p>
<p> // Pacotes Java<br />
 import java.util.*;<br />
 import javax.swing.JOptionPane;</p>
<p> public class TesteSet {<br />
 private String colors[] = { &#8220;vermelha&#8221;, &#8220;branca&#8221;, &#8220;azul&#8221;,<br />
 &#8220;verde&#8221;, &#8220;cinza&#8221;, &#8220;laranja&#8221;, &#8220;bronze&#8221;, &#8220;branca&#8221;, &#8220;cinza&#8221;,<br />
 &#8220;pesego&#8221;, &#8220;ciza&#8221;, &#8220;laranja&#8221; };</p>
<p> // Cria e imprime ArrayList<br />
 public TesteSet()<br />
 {<br />
 ArrayList list;</p>
<p> list = new ArrayList( Arrays.asList( colors ) );<br />
 String var = &#8220;&#8221;;<br />
 JOptionPane.showMessageDialog( null, list, &#8220;ArrayList&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 imprimeNaoDuplicados( list );<br />
 }</p>
<p> // cria um conjunto de array para eleiminar duplicados<br />
 public void imprimeNaoDuplicados( Collection collection )<br />
 {<br />
 // cria um HashSet e obtem iterator<br />
 HashSet set = new HashSet( collection );<br />
 Iterator iterator = set.iterator();<br />
 String var = &#8220;NÃ£o duplicados: \n\r&#8221;;</p>
<p> while ( iterator.hasNext() ){<br />
 var += iterator.next() + &#8220;\n\r&#8221;;</p>
<p> }</p>
<p> JOptionPane.showMessageDialog( null, var, &#8220;HashSet&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 }</p>
<p> // executa aplicação<br />
 public static void main( String args[] )<br />
 {<br />
 new TesteSet();<br />
 } </p>
<p> } // fim da classe TesteSet</p>
<p><img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteSet_01.jpg" alt="" /><br />
<img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteSet_02.jpg" alt="" /></p>
<p>7. Exemplo TreeSet</p>
<p> import java.util.*;<br />
 import javax.swing.JOptionPane;</p>
<p> public class TesteOrdenacaoSet {<br />
 private static String names[] = { &#8220;amarela&#8221;, &#8220;verde&#8221;, &#8220;preta&#8221;,<br />
 &#8220;pesego&#8221;, &#8220;cinza&#8221;, &#8220;branca&#8221;, &#8220;laranja&#8221;, &#8220;vermelha&#8221;, &#8220;verde&#8221; };<br />
 private String var = &#8220;&#8221;;</p>
<p> // cria uma coleção ordenado do TreeSet, e manipula-o<br />
 public TesteOrdenacaoSet()<br />
 {<br />
 TreeSet tree = new TreeSet( Arrays.asList( names ) );<br />
 var = &#8220;Coleção total \n\r&#8221;;</p>
<p> imprimeConjunto( tree );</p>
<p> // pega a base da coleção sobre &#8220;laranja&#8221;<br />
 var = &#8220;headSet (\&#8221;laranja\&#8221;) \n\r&#8221;;<br />
 imprimeConjunto( tree.headSet( &#8220;laranja&#8221; ) );</p>
<p> // pega o final da coleção sobre &#8220;lararanja&#8221;<br />
 var = &#8220;tailSet (\&#8221;laranja\&#8221;) \n\r&#8221;;<br />
 System.out.print( &#8220;tailSet (\&#8221;laranja\&#8221;): &#8221; );<br />
 imprimeConjunto( tree.tailSet( &#8220;laranja&#8221; ) );</p>
<p> // pega o primeiro e o último elemento<br />
 var = &#8220;primeiro: &#8221; + tree.first() + &#8220;\n\r&#8221;;<br />
 var += &#8220;ultimo : &#8221; + tree.last();<br />
 JOptionPane.showMessageDialog( null, var, &#8220;TreeSet&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 }</p>
<p> // imprime a coleção<br />
 public void imprimeConjunto( SortedSet set )<br />
 {<br />
 Iterator iterator = set.iterator();</p>
<p> while ( iterator.hasNext() ){<br />
 var += iterator.next() + &#8220;\n\r &#8220;;<br />
 }</p>
<p> JOptionPane.showMessageDialog( null, var, &#8220;TreeSet&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 System.out.println();<br />
 } </p>
<p> // executa a aplicação<br />
 public static void main( String args[] )<br />
 {<br />
 new TesteOrdenacaoSet();<br />
 } </p>
<p> } // fim da classe TesteOrdenacaoSet</p>
<p><img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteOrdenacaoSet_01.jpg" alt="" /><br />
<img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteOrdenacaoSet_02.jpg" alt="" /><br />
<img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteOrdenacaoSet_03.jpg" alt="" /><br />
<img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteOrdenacaoSet_04.jpg" alt="" /></p>
<p>8. Exemplo HashMap</p>
<p> // Pacotes Java<br />
 import java.util.*;<br />
 import javax.swing.JOptionPane;</p>
<p> public class TesteMap {<br />
 private static String names[] = { &#8220;um&#8221;, &#8220;dois&#8221;, &#8220;tres&#8221;,<br />
 &#8220;quatro&#8221;, &#8220;cinco&#8221;, &#8220;seis&#8221;, &#8220;sete&#8221;, &#8220;dois&#8221;, &#8220;dez&#8221;, &#8220;quatro&#8221; };<br />
 private String var = &#8220;&#8221;;</p>
<p> // constroe um HashMap e imprime conteudo<br />
 public TesteMap()<br />
 {<br />
 HashMap map = new HashMap();<br />
 Integer i;</p>
<p> for ( int count = 0; count &lt; names.length; count++ ) {<br />
 i = ( Integer ) map.get(<br />
 new Character( names[ count ].charAt( 0 ) ) );</p>
<p> // se chave não esta no map então é dado um valor e<br />
 // do contrário incrementa este valor em 1<br />
 if ( i == null )<br />
 map.put(<br />
 new Character( names[ count ].charAt( 0 ) ),<br />
 new Integer( 1 ) );<br />
 else<br />
 map.put(<br />
 new Character( names[ count ].charAt( 0 ) ),<br />
 new Integer( i.intValue() + 1 ) );<br />
 }</p>
<p> var = &#8220;Número de palavras iciadas com cada letra: \n\r&#8221;;</p>
<p> imprimetMap( map );<br />
 }</p>
<p> // saí­da do conteúdo do map<br />
 public void imprimetMap( Map mapRef )<br />
 {<br />
 var += mapRef.toString() + &#8220;\n\r&#8221;;<br />
 var += &#8220;tamanho: &#8221; + mapRef.size() + &#8220;\n\r&#8221;;<br />
 var += &#8220;É vazio: &#8221; + mapRef.isEmpty() + &#8220;\n\r&#8221;;<br />
 JOptionPane.showMessageDialog( null, var, &#8220;Teste Map&#8221;, JOptionPane.INFORMATION_MESSAGE );<br />
 } </p>
<p> // executa a aplicação<br />
 public static void main( String args[] )<br />
 {<br />
 new TesteMap();<br />
 } </p>
<p> } // fim classe Teste Map</p>
<p><img src="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteMap.jpg" alt="" /></p>
<p>Autores: Carlos Fernando Gonçalves e Marli Esprega Gonçalves (Antares Information Systems)</p>
<p>Retirado de: http://www.javanoroeste.com.br/2006/tutoriais/arrays_colecoes.html</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/javeiros.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/javeiros.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javeiros.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javeiros.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javeiros.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javeiros.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javeiros.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javeiros.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javeiros.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javeiros.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javeiros.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javeiros.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javeiros.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javeiros.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javeiros.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javeiros.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=10&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javeiros.wordpress.com/2008/06/28/tutorial-java-arrays-e-colecoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/026a8c5105cd401d1410ab601aa03a0b?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">javeiros</media:title>
		</media:content>

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/array_ordenado1.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/array_ordenado2.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/Collection.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteColecao_01.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteColecao_02.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteList_01.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteList_02.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteList_03.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteList_04.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteSet_01.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteSet_02.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteOrdenacaoSet_01.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteOrdenacaoSet_02.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteOrdenacaoSet_03.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteOrdenacaoSet_04.jpg" medium="image" />

		<media:content url="http://www.javanoroeste.com.br/2006/tutoriais/imagens/TesteMap.jpg" medium="image" />
	</item>
		<item>
		<title>Simulador de Certificações Online</title>
		<link>http://javeiros.wordpress.com/2008/06/25/simulador-de-certificacoes-online/</link>
		<comments>http://javeiros.wordpress.com/2008/06/25/simulador-de-certificacoes-online/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 06:53:41 +0000</pubDate>
		<dc:creator>javeiros</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://javeiros.wordpress.com/?p=6</guid>
		<description><![CDATA[Por Raphael Medeiros, da equipe do jCert. Está disponível um simulador on-line para certificações Java, o jCert, o sistema esta em fase beta, e no momento sua base de dados esta sendo populada com questões para certificação SCJP, estamos na versão 3 a qual possui suporte a usuários cadastrados e multiplas certificações como: scwcd, etc, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=6&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="corpoPublicacao">
<p>Por Raphael Medeiros, da equipe do jCert.</p>
<p>Está disponível um simulador on-line para certificações Java, o jCert, o sistema esta em fase beta, e no momento sua base de dados esta sendo populada com questões para certificação SCJP, estamos na versão 3 a qual possui suporte a usuários cadastrados e multiplas certificações como: scwcd, etc, a 4 terá acesso através de dispositivos móveis (usando o OperaMini por exemplo) e a versão 5 deverá ganhar o suporte nativo a plataforma Java ME, entre cada uma destas versões melhorias mais simples serão implementadas, o simulador conta também com a ajuda dos usuários os quais podem propor questões ao sistema, as questões serão avaliadas por um Arquiteto Java Certificado e poderão compor a base. Mais informações no site do simulador em:</p>
<p><a href="http://www.jcert.com.br/">http://www.jcert.com.br/</a></div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/javeiros.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/javeiros.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javeiros.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javeiros.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javeiros.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javeiros.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javeiros.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javeiros.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javeiros.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javeiros.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javeiros.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javeiros.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javeiros.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javeiros.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javeiros.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javeiros.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=6&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javeiros.wordpress.com/2008/06/25/simulador-de-certificacoes-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/026a8c5105cd401d1410ab601aa03a0b?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">javeiros</media:title>
		</media:content>
	</item>
		<item>
		<title>Evite float e double se você quer respostas exatas!</title>
		<link>http://javeiros.wordpress.com/2008/06/25/evite-float-e-double-se-voce-quer-respostas-exatas/</link>
		<comments>http://javeiros.wordpress.com/2008/06/25/evite-float-e-double-se-voce-quer-respostas-exatas/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 06:49:34 +0000</pubDate>
		<dc:creator>javeiros</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://javeiros.wordpress.com/?p=3</guid>
		<description><![CDATA[por: David Pereira (david@jeebrasil.com.br) Usar double ou float podem trazer muitos problemas para operações que exijam exatidão, como operações financeiras. Saiba como evitar tais problemas utilizando as alternativas aqui apresentadas. Introdução Um livro que todo programador Java deveria ler é o Effective Java [1], de Joshua Bloch. Effective Java apresenta um conjunto de boas práticas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=3&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p class="autores">por:</p>
<p class="autor">David Pereira (david@jeebrasil.com.br)</p>
<p class="resumo">Usar double ou float podem trazer muitos problemas para operações que exijam exatidão, como operações financeiras. Saiba como evitar tais problemas utilizando as alternativas aqui apresentadas.</p>
<h4>Introdução</h4>
<p>Um livro que todo programador Java deveria ler é o Effective Java [1], de Joshua Bloch. Effective Java apresenta um conjunto de boas práticas que você deve ter em mente quando está programando em Java e muitas das dicas que o livro dá são preciosas.</p>
<p>Um tópico abordado que eu considero extremamente importante é o que dá título a este artigo: <strong><em>Avoid float and double if exact answers are required</em></strong>, do capítulo 7 – <strong><em>General Programming</em></strong>. Basicamente, o problema é que quando precisamos usar números decimais e precisamos obter respostas exatas, sem erros de precisão, usar os tipos float e double para representar tais números pode causar problemas. Que problemas?</p>
<p>Pegando emprestado o exemplo do Effective Java, imagine que você tem R$ 1,95 no seu bolso e gasta R$ 1,03. Com quanto você vai ficar? A resposta é óbvia: R$ 0,92. Agora tente executar a seguinte linha de código:</p>
<pre>System.out.println(1.95 - 1.03);</pre>
<p class="legenda">Listagem 1: Exemplo de operação com doubles que resulta em número inexato</p>
<p>O que será impresso? Não, não será 0,92, será 0,9199999999999999.</p>
<p>Para ilustrar melhor o problema, veja também o seguinte exemplo: você tem R$ 1,50 e quer comprar balas no Mercadinho do Seu Zé. A máquina de balas do Seu Zé funciona da seguinte maneira: você coloca o dinheiro e aperta um botão referente ao tipo de bala que você quer. Cada vez que você aperta um botão, a bala escolhida é expelida pela máquina e o seu saldo é diminuído. Você poderá tirar balas enquanto o seu saldo for maior que zero.</p>
<p>Só que os programadores da máquina de balas do Mercadinho do Seu Zé não foram muito espertos e usaram double para representar o saldo do cliente e os preços das balas. O que acontecerá se você resolver tirar balas de R$ 0,15 até acabar o seu saldo? Quantas balas será possível obter? Uma mente sã responderia 10 balas, mas não é isso que acontece, basta rodar o código abaixo.</p>
<pre>double seuSaldo = 1.50;
int balasRetiradas = 0;

while (seuSaldo &gt; 0) {
	balasRetiradas++;
	seuSaldo -= 0.15;
	System.out.println("Retirou " + balasRetiradas + " bala(s)");
	System.out.println("Saldo Atual: " + seuSaldo + "\n");
}

System.out.println("Você retirou " + balasRetiradas + " balas!");</pre>
<p class="legenda">Listagem 2: Algoritmo da máquina de balas do Seu Zé</p>
<p>A saída será a seguinte:</p>
<pre>Retirou 1 bala(s)
Saldo Atual: 1.35

Retirou 2 bala(s)
Saldo Atual: 1.2000000000000002

Retirou 3 bala(s)
Saldo Atual: 1.0500000000000003

Retirou 4 bala(s)
Saldo Atual: 0.9000000000000002

Retirou 5 bala(s)
Saldo Atual: 0.7500000000000002

Retirou 6 bala(s)
Saldo Atual: 0.6000000000000002

Retirou 7 bala(s)
Saldo Atual: 0.4500000000000002

Retirou 8 bala(s)
Saldo Atual: 0.30000000000000016

Retirou 9 bala(s)
Saldo Atual: 0.15000000000000016

Retirou 10 bala(s)
Saldo Atual: 1.6653345369377348E-16

Retirou 11 bala(s)
Saldo Atual: -0.14999999999999983

Você retirou 11 balas!</pre>
<p class="legenda">Listagem 3: Como enganar o Seu Zé&#8230;</p>
<p>Por causa dos erros de precisão, o seu saldo não era zero quando deveria ser. Era um número bastante pequeno, bem próximo de zero, mas ainda maior que zero. Isso possibilitou a retirada de mais uma bala, até que o saldo ficou negativo – coisa que nunca deveria ocorrer.</p>
<p>Sistemas que lidam com operações monetárias são especialmente sensíveis ao problema apresentado. Erros que, a princípio, poderiam ser desconsiderados, pois representavam apenas 0,0001 centavo, podem virar erros sérios (de algumas dezenas de centavos – que podem não parecer tão importantes mas são essenciais para uma auditoria) quando o montante com o qual se está trabalhando é grande.</p>
<p>Agora que já conhecemos bem o problema, por que isso ocorre? Para entender, vamos usar um pouco de matemática.</p>
<h4>Matemática Binária</h4>
<p>Nós usamos no dia-a-dia números na base decimal, ou seja, números representados por algarismos que variam de 0 a 9. Além disso, a posição em que esses algarismos se encontram influencia no seu valor – por exemplo, em 25, o algarismo 5 vale 5, mas em 51 o algarismo 5 vale 50. O número 2546, por exemplo, pode ser decomposto de acordo com o valor de cada algarismo em sua posição:</p>
<p align="center">(2 * 1000) + (5 * 100) + (4 * 10) + (6 * 1)</p>
<p align="center">ou ainda:</p>
<p align="center">(2 * 10<sup>3</sup>) + (5 * 10<sup>2</sup>) + (4 * 10<sup>1</sup>) + (6 * 10<sup>0</sup>)</p>
<p>Podemos considerar então que, começando do zero e crescendo para a esquerda, o valor do algarismo é igual ao seu valor multiplicado por dez elevado à sua posição no número e o valor do número é igual à soma dos valores dos algarismos. Para números decimais, as posições dos números após a vírgula são consideradas negativas, portanto 0,567 é igual a:</p>
<p align="center">(0 * 10<sup>0</sup>) + (5 * 10<sup>-1</sup>) + (6 * 10<sup>-2</sup>) + (7 * 10<sup>-3</sup>)</p>
<p>Já os computadores trabalham com números na base binária: apenas dois algarismos são usados para representar os números – 0 e 1. Na base binária a posição dos algarismos também é importante: no número binário 100, o 1 vale 4. A regra é parecida com a dos números decimais, por exemplo, o número 11001 é igual a:</p>
<p align="center">(1 * 2<sup>4</sup>) + (1 * 2<sup>3</sup>) + (0 * 2<sup>2</sup>) + (0 * 2<sup>1</sup>) + (1 * 2<sup>0</sup>)</p>
<p>ou seja, 11001 em binário é 25 em decimal. Perceba que não usamos agora o dez como base da exponenciação que determina o valor da posição do algarismo, e sim 2. Se estivéssemos trabalhando com números octais (base 8), usaríamos algarismos de 0 a 7 e base 8 na exponenciação, se estivéssemos trabalhando com base hexadecimal (base 16), usaríamos algarismos de 0 a 9 e as letras A, B, C, D, E e F e base 16 na exponenciação. Para saber mais detalhes sobre números binários, visite os artigos <a href="http://en.wikipedia.org/wiki/Binary_numeral_system">Binary numeral system</a> e <a href="http://en.wikipedia.org/wiki/Positional_notation">Positional notation</a>, na Wikipedia.</p>
<p>Voltando ao problema, os erros de precisão ocorrem porque a representação em binário de alguns números decimais exigem uma quantidade de dígitos maior que a quantidade disponível para armazenamento (a máquina virtual Java aloca 4 bytes &#8211; 32 bits &#8211; para floats e 8 bytes &#8211; 64 bits &#8211; para doubles), então teríamos que truncar esses dígitos em algum ponto, consequentemente interferindo na precisão do número.</p>
<p>Considere o algoritmo abaixo para converter um número decimal entre zero e um da base 10 para a base 2:</p>
<pre>imprima "0,"
enquanto numero != 0 faça
	numero = numero * 2

	se numero &lt; 1
		imprima "0"
 	senão
		imprima "1"
		numero = numero - 1
	fim
fim</pre>
<p class="legenda">Listagem 4: Algoritmo para conversão decimal para binário de números entre 0 e 1</p>
<p>Tente executá-lo para um número como 0,1, por exemplo:</p>
<div>
<table border="0" cellspacing="0" cellpadding="5">
<thead>
<tr>
<th>Número</th>
<th>Resultado</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>0.1</strong></td>
<td>0.</td>
</tr>
<tr>
<td>0.1 x 2 = <strong>0.2</strong> &lt; 1</td>
<td>0.0</td>
</tr>
<tr>
<td>0.2 x 2 = <strong>0.4</strong> &lt; 1</td>
<td>0.00</td>
</tr>
<tr>
<td>0.4 x 2 = <strong>0.8</strong> &lt; 1</td>
<td>0.000</td>
</tr>
<tr>
<td>0.8 x 2 = <strong>1.6</strong> ≥ 1</td>
<td>0.0001</td>
</tr>
<tr>
<td>0.6 x 2 = <strong>1.2</strong> ≥ 1</td>
<td>0.00011</td>
</tr>
<tr>
<td>0.2 x 2 = <strong>0.4</strong> &lt; 1</td>
<td>0.000110</td>
</tr>
<tr>
<td>0.4 x 2 = <strong>0.8</strong> &lt; 1</td>
<td>0.0001100</td>
</tr>
<tr>
<td>0.8 x 2 = <strong>1.6</strong> ≥ 1</td>
<td>0.00011001</td>
</tr>
<tr>
<td>0.6 x 2 = <strong>1.2</strong> ≥ 1</td>
<td>0.000110011</td>
</tr>
<tr>
<td>0.2 x 2 = <strong>0.4</strong> &lt; 1</td>
<td>0.0001100110</td>
</tr>
</tbody>
</table>
</div>
<p>Listagem 5: Passos do algoritmo da listagem 4 para o número 0.1</p>
<p>Você perceberá que entrará em um loop infinito, pois 0,1 em binário é 0.00011001100110011&#8230;</p>
<p>A forma como os computadores armazenam o número não é exatamente essa, mas com isso é possível se ter uma idéia dos problemas decorrentes da representação em binário de números em ponto flutuante. Sugiro que leiam o artigo What every computer scientist should know about floating-point arithmetic [2], de David Goldberd, para entender todos os detalhes deste problema.<br />
3. E agora, como resolver?</p>
<p>O Effective Java sugere que se use int, long ou BigDecimal para representar os valores monetários. A classe BigDecimal foi desenvolvida para resolver dois tipos de problemas associados a números de ponto flutuante (floats e doubles): primeiro, resolve o problema da inexatidão da representação de números decimais; segundo, pode ser usado para trabalhar com números com mais de 16 dígitos significativos. Em compensação, utilizar BigDecimal pode tornar o programa menos legível por não haver sobrecarga dos operadores matemáticos para ela, sendo necessário usar métodos da classe. Veja, por exemplo, como você faria o programa da listagem 1 com BigDecimal:</p>
<p>BigDecimal d1 = new BigDecimal(&#8220;1.95&#8243;);<br />
BigDecimal d2 = new BigDecimal(&#8220;1.03&#8243;);</p>
<p>System.out.println(d1.subtract(d2));</p>
<p>Listagem 6: Programa da listagem 1 com BigDecimal</p>
<p>o resultado, ao contrário do primeiro exemplo, é 0.92, ou seja, o valor correto.</p>
<p>Utilizar os primitivos normalmente é mais rápido e mais prático, mas o problema fica por conta da definição das casas decimais. Você pode controlar diretamente as casas decimais, por exemplo, utilizando como unidade para os valores o centavo ao invés de real. Um int ou um long passariam a representar a quantidade de centavos presentes no valor, e não a quatidade de reais. Por exemplo:</p>
<p>long l1 = 195;<br />
long l2 = 103;</p>
<p>System.out.println(l1 – l2);</p>
<p>Listagem 6: Programa da listagem 1 com long</p>
<p>As variáveis acima dizem que você tem 195 centavos (e não R$ 1,95) e vai gastar 103 centavos, e não R$ 1,03. No final você ficará com 92 centavos (e não R$ 0,92).</p>
<p>Se você trabalha com valores com diferentes números de casas decimais, talvez seja melhor deixar o computador fazer este trabalho e utilizar o BigDecimal. Senão, talvez usar long ou int seja mais fácil. Se os valores não ultrapassarem nove dígitos, você pode usar int; até dezoito dígitos, utilize long; e acima disto será necessário usar o BigDecimal.</p>
<p>Veja como ficaria o programa da máquina do Seu Zé com BigDecimal:</p>
<p>BigDecimal seuSaldo = new BigDecimal(&#8220;1.50&#8243;);<br />
int balasRetiradas = 0;</p>
<p>while (seuSaldo.compareTo(BigDecimal.ZERO) &gt; 0) {<br />
balasRetiradas++;<br />
seuSaldo = seuSaldo.subtract(new BigDecimal(&#8220;0.15&#8243;));<br />
System.out.println(&#8220;Retirou &#8221; + balasRetiradas + &#8221; bala(s)&#8221;);<br />
System.out.println(&#8220;Saldo Atual: &#8221; + seuSaldo + &#8220;\n&#8221;);<br />
}</p>
<p>System.out.println(&#8220;Você retirou &#8221; + balasRetiradas + &#8221; balas!&#8221;);</p>
<p>Listagem 7: Programa do Seu Zé com BigDecimal</p>
<p>E a saída seria:</p>
<p>Retirou 1 bala(s)<br />
Saldo Atual: 1.35</p>
<p>Retirou 2 bala(s)<br />
Saldo Atual: 1.20</p>
<p>Retirou 3 bala(s)<br />
Saldo Atual: 1.05</p>
<p>Retirou 4 bala(s)<br />
Saldo Atual: 0.90</p>
<p>Retirou 5 bala(s)<br />
Saldo Atual: 0.75</p>
<p>Retirou 6 bala(s)<br />
Saldo Atual: 0.60</p>
<p>Retirou 7 bala(s)<br />
Saldo Atual: 0.45</p>
<p>Retirou 8 bala(s)<br />
Saldo Atual: 0.30</p>
<p>Retirou 9 bala(s)<br />
Saldo Atual: 0.15</p>
<p>Retirou 10 bala(s)<br />
Saldo Atual: 0.00</p>
<p>Você retirou 10 balas!</p>
<p>Listagem 8: Saída do programa anterior</p>
<p>De forma parecida, a versão com long seria:</p>
<p>long seuSaldo = 150;<br />
int balasRetiradas = 0;</p>
<p>while (seuSaldo &gt; 0) {<br />
balasRetiradas++;<br />
seuSaldo -= 15;<br />
System.out.println(&#8220;Retirou &#8221; + balasRetiradas + &#8221; bala(s)&#8221;);<br />
System.out.println(&#8220;Saldo Atual: &#8221; + seuSaldo + &#8220;\n&#8221;);<br />
}</p>
<p>System.out.println(&#8220;Você retirou &#8221; + balasRetiradas + &#8221; balas!&#8221;);</p>
<p>Listagem 9: Programa do Seu Zé com long</p>
<p>E a saída:</p>
<p>Retirou 1 bala(s)<br />
Saldo Atual: 135</p>
<p>Retirou 2 bala(s)<br />
Saldo Atual: 120</p>
<p>Retirou 3 bala(s)<br />
Saldo Atual: 105</p>
<p>Retirou 4 bala(s)<br />
Saldo Atual: 90</p>
<p>Retirou 5 bala(s)<br />
Saldo Atual: 75</p>
<p>Retirou 6 bala(s)<br />
Saldo Atual: 60</p>
<p>Retirou 7 bala(s)<br />
Saldo Atual: 45</p>
<p>Retirou 8 bala(s)<br />
Saldo Atual: 30</p>
<p>Retirou 9 bala(s)<br />
Saldo Atual: 15</p>
<p>Retirou 10 bala(s)<br />
Saldo Atual: 0</p>
<p>Você retirou 10 balas!</p>
<p>Listagem 10: Saída do programa anterior<br />
Conclusões</p>
<p>Como pudemos ver nos exemplos mostrados no decorrer do artigo, algumas decisões simples e até óbvias, como usar float ou double para representar números decimais, podem trazer conseqüências sérias para o seu programa se não forem bem pensadas e analisadas. Diferenças imperceptíveis a princípio podem tornar-se grandes dores de cabeça e a mudança da estratégia de armazenamento dos valores após a implantação do sistema pode ser algo bem complicado de se fazer. Para não ter problemas no futuro, não se esqueça: “Evite float e double se você quer respostas exatas”.<br />
Referências</p>
<p>[1] Joshua Bloch, Effective Java Programming Language Guide. Addison-Wesley Professional, 2001.</p>
<p>[2] David Goldberg, What every computer scientist should know about floating-point arithmetic. http://docs.sun.com/source/806-3568/ncg_goldberg.html, acesso em 12 de outubro de 2006.</p>
<p><span style="color:#c0c0c0;">Retirado de: http://www.jeebrasil.com.br/mostrar/47</span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/javeiros.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/javeiros.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/javeiros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/javeiros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/javeiros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/javeiros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/javeiros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/javeiros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/javeiros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/javeiros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/javeiros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/javeiros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/javeiros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/javeiros.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/javeiros.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/javeiros.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=javeiros.wordpress.com&amp;blog=4065541&amp;post=3&amp;subd=javeiros&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://javeiros.wordpress.com/2008/06/25/evite-float-e-double-se-voce-quer-respostas-exatas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/026a8c5105cd401d1410ab601aa03a0b?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=X" medium="image">
			<media:title type="html">javeiros</media:title>
		</media:content>
	</item>
	</channel>
</rss>
