IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Tableau unidimentionel de types primitifs et sous-tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Par défaut Tableau unidimentionel de types primitifs et sous-tableau
    Salut a toutes et a tous,
    voici mon problème : je doit créer un tableau de bytes de taille 16 que je remplirais.*Ensuite je voudrais crée 4 nouveaux tableaux de bytes de taille 4 qui pointerais sur des sous-partie du premier tableau.
    exemple :
    byte[] monGrandTableau = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 110, 120, 13, 14, 15};
    byte[] sousPartie1 = new byte[4];
    byte[] sousPartie2 = new byte[4];
    byte[] sousPartie3 = new byte[4];
    byte[] sousPartie4 = new byte[4];

    sousPartie1 = …
    sousPartie2 = …
    sousPartie3 = …
    sousPartie4 = …

    contrainte :
    - tout mes tableau doivent être de type byte
    - je ne doit surtout PAS recopier de données

    Est-ce possible si oui comment ?

    d'avance merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par CKLN00 Voir le message
    Est-ce possible si oui comment ?
    Pas avec des tableaux, non. Les tableaux n'ont pas de mécanisme de "vue," que ce soit d'une plage limitée de leurs index ou quoi que ce soit d'autre.

    Quelque chose de ce genre peut être fait avec des List, à l'aide de leur méthode subList().
    Toutefois, une List ne peut pas contenir de type primitif, et il faudra donc utiliser leur type objet wrappeur à la place. Dans le cas présent, une List<Byte>.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 51
    Par défaut
    Ca?

    //Tableau contient data
    byte[] monGrandTableau = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 110, 120, 13, 14, 15};
    //Chaque sous partie contient les index de grand tableau(pointeurs?)
    byte[] sousPartie1 = {0,1,2,3};
    byte[] sousPartie2 = {4,5,6,7};
    byte[] sousPartie3 = {8,9,10,11};
    byte[] sousPartie4 = {12,13,14,15};

    Pour appeler, tu ferais un truc du genre:
    system.out.println(monGrandTableau[sousParties1[1]]);

    ---

    Si c'est ça que tu demandais ->

  4. #4
    Membre expérimenté Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Par défaut Merci
    malheureusement le but de la manœuvre est d'alimenter une fonction qui a besoin de byte[] en entré tout en économisant la mémoire en ram (les sous tableau de bytes devant au final contenir des images de grande taille).

    Citation Envoyé par thelvin Voir le message
    Les tableaux n'ont pas de mécanisme de "vue"
    de toute façon les sous-tableau ne devais pas êtres de simples vue mais permettre potentiellement de modifier leur contenue (et donc celui du grand tableau).

    Il est donc impossible en java d'utiliser des pointeurs pour construire des tableaux et c'est dommage je vous remercie tout les 2 (meme si SamSer avais pas vraiment compris :p) et

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    hello,

    relis la réponse de thelvin: on peut le faire, mais pas avec des tableaux, avec des listes et la méthode subList, qui retourne une vue de la liste principale mais qui ne duplique PAS le tableau ou la structure de pointeurs sous-jaçent (toute modif dans une liste obtenue avec subList est repercutée dans la liste de base).

    Concernant le typage en Byte au lieu de byte, c'est transparent grâce à l'auto(un)boxing de java 5 donc on peut les manipuler "comme si" c'était des byte


  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Si t'as des fonctions qui manipulent des tableaux pourquoi ne pas utiliser deux paramètres supplémentaires "int start" et "int length" comme c'est fait dans l'API Java ?

    Sinon pourquoi ne pas créer une sorte de BitSet mais gestion de "range" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    public interface BitArray
    {
       public byte get(int index);
       public byte set(int index, byte b);
       public BitArray range(int start, int length);
       public int length();
    }
     
    public class BitArrayImpl
    {
      private byte[] bytes;
      public BitArrayImpl(final byte[] bs)
      {
        bytes = bs;
      }
     
      public byte get(int index)
      {
         return bytes[index];
      }
     
      public byte set(index index, byte b)
      {
        byte old = bytes[index];
        bytes[index] = b;
        return old;
      }
     
      public int length()
      {
        return bytes.length;
      }
     
      public BitArray range(int start, int length)
      {
        return new BitArrayRange(this, start, length);
      }
    }
     
    public class BitArrayRange
    {
      private BitArray underlying;
      private int start;
      private int length;
      public BitArrayRange(BitArray array, int from, int count)
      {
         underlying = array;
         start = from;
         length = count;
      }
     
      public byte get(int index)
      {
         if (index >= length) throw new ArrayOutOfBoundsException();
         return underlying.get(start + index);
      }
     
      public byte set(index index, byte b)
      {
        if (index >= length) throw new ArrayOutOfBoundsException();
        return underlying.set(start + index, b);
      }
     
      public int length()
      {
        return length;
      }
     
      public BitArray range(int start, int length)
      {
        return new BitArrayRange(this, start, length);
      }
    }
    En prime tu peux gérer un tableau au délà de 2^32 élément en utilisant plusieurs tableaux et le type long.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion de tableau de byte en types primitifs
    Par soft0613 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 14/03/2008, 15h14
  2. Réponses: 6
    Dernier message: 17/10/2006, 12h21
  3. Tableau dynamique - 2 types
    Par _ChToM_ dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 03/10/2006, 18h51
  4. Réponses: 1
    Dernier message: 13/12/2005, 11h30
  5. Tableau de 2 types differents
    Par The_Undertaker dans le forum C++
    Réponses: 5
    Dernier message: 21/10/2005, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo